gpt4 book ai didi

c# - 查找和比较两个对象,同时避免 NullReferenceException

转载 作者:太空宇宙 更新时间:2023-11-03 21:19:13 26 4
gpt4 key购买 nike

我正在尝试将原始对象与更新后的对象进行比较,以确定它们是否彼此不同。比较逻辑应该如下:

  • 如果对象 a 和 b 都不包含 SomeList 中的 EType 等于 EnumType.FooType 的对象,则应将它们评估为相等。
  • 如果只有 a xor b 包含 SomeList 中的一个对象,该对象的 EType 等于 EnumType.FooType,则它们应该被评估为不同。
  • 如果两个对象都包含一个如上所述的对象,并且两个对象的属性 Number 相等,则对象 a 和 b 应该被评估为相等。

下面的代码解决了这个任务,但是它又长又笨重,所以我问是否可以缩短它并使其“更漂亮”?

var a = original.SomeList.FirstOrDefault(p => p != null && p.EType == EnumType.FooEnum);
var b = updated.SomeList.FirstOrDefault(p => p != null && p.EType == EnumType.FooEnum);
var bEqual = false;
if (a == null && b == null)
bEqual = true;
else if (a != null && b != null)
bEqual = a.Number == b.Number;

最佳答案

return (a == null) ? (b == null) :
(b != null && a.Number == b.Number);

更好的解决方案是创建一整套相等函数和运算符。这意味着实现 IEquatable 并覆盖 Object.Equals(object)。总共四个小函数将使您能够编写:

return a == b;

MSDN 上有一篇关于重写相等函数的好文章。

How to: Define Value Equality for a Type (C# Programming Guide)

关于c# - 查找和比较两个对象,同时避免 NullReferenceException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31920076/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com