- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试使用 Enumerable.SequenceEqual(x,y)
因为我希望它基于Object.Equals(x,y)
方法,如果 x 或 y 为 null,则返回 false,如果两者均为 null(对于 null 情况),则返回 true。
但是,如果任何参数为 null 引用,Enumerable.SequenceEqual(x,y)
将抛出异常,如果给它两个 null,则不会返回 true。
在我的代码中,我经常检查集合相等性,所以我创建了一个方法来模拟序列的 Object.Equals
行为,但我只是想知道这种默认行为背后的逻辑是什么,并且可能有一个现有方法没有空值异常?
最佳答案
嗯,MSDN documentation明确声明它会抛出一个 ArgumentNullException
以防任何一个传入的序列为空。我认为这是为了与“标准行为”保持一致,即当您尝试取消引用对象时,对象会抛出 NullReferenceException
。考虑一下:
List<int> foo = null;
foo.SequenceEqual(new List<int>());
这没问题,因为 SequenceEqual
是一个扩展方法,因此可以处理空对象,但它也会造成混淆。据我所知,Linq 提供的每个扩展方法都遵循这种行为。此外,您不需要为每个扩展方法处理特殊的 null 情况(您需要就明智的行为达成一致并添加额外的逻辑并维护和测试它)。说它是非法的使它更健壮(针对逻辑错误)并且从框架的角度来看是一致的。我经常使用 Linq,从来没有遇到过这个问题——我只是确保我的所有序列都不为空。大大减少代码困惑(从代码中删除大量空检查)。
关于c# - 如果任何参数为空,为什么 Enumerable.SequenceEqual 会抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6407246/
在下面的代码中调用 SequenceEqual当 List 是用类泛型类型定义的(调用 EquatableClass.Equals<>)时,在泛型列表上返回 true(如预期的那样)。 如果列表定义为
我使用 c# 3.5 和 linq 编写了一个简单的程序。 我有课 public class Product { public Product() { } public
我在进行彩票模拟,我有 2 个不同的数组,其中包含 6 个数字,首先保存用户希望玩的数字,其次保存每次运行生成的数字。 用户将他们的数字输入文本框,并将其保存为字符串并放入数组中的相应位置,随机生成的
父类型: public class IdObject : IComparable, IEquatable { public int id { get; set; } public bo
我有两个 List我正在使用 SequenceEqual方法来确定它们是否匹配。 我现在需要一个 List, string, IEnumerable,失败的元素的任何索引。 有没有简单的方法? 谢谢
我有一个名为 Country 的类。它有公共(public)成员“CountryName”和“States”。 我已经声明了一份国家名单。 现在我想编写一个函数,它接受一个新的“国家”并确定 Coun
在 C# 中,是否有 IEqualityComparer使用 SequenceEqual判断是否相等的方法? 最佳答案 .NET Framework 中没有这样的比较器,但您可以创建一个: publi
任何人都可以帮助解决我遇到的一些问题。我正在尝试创建一种自制的身份验证方法,我有点卡在几个方面,希望有人能提供帮助。我首先想问的是如何解决我在代码中评论的问题: public string A
我正在编写一个简单的控制台应用程序来比较自定义类对象的两个实例。对于每个属性,我将 True 或 False 写入控制台窗口以显示每个对象的属性是否匹配。 某些属性,如 ProductLines(列表
我有以下 LINQ 语句(stationId 是一个 int 而 version 是一个字节数组): var foundStation = (from wd in _Conte
为什么Enumerable.SequenceEqual将其比较器视为 IEqualityComparer ?该算法似乎没有使用 GetHashCode .为什么不取一个 Func谓词,类似于 Firs
我一直在尝试实现 Set 相等性(即顺序不相关的列表比较),并在阅读了诸如 this 之类的问题之后和 this ,编写了以下简单扩展: public static bool SetEqual
我一直在尝试实现 Set 相等性(即顺序不相关的列表比较),并在阅读了诸如 this 之类的问题之后和 this ,编写了以下简单扩展: public static bool SetEqual
我很难弄清楚 SequenceEqual 在 Reactive Extensions 2.2.5 版中是如何工作的 下面是代码 var subject1 = new Subject();
有人能解释一下为什么我会得到不同的结果吗? bool result = true; for (int row = 0; row < State.Rows; row++) { for (int
我正在尝试使用以下逻辑检查字符串是否为回文的可能性 class Program { static void Main(string[] args) { Console.
我正在尝试使用 Enumerable.SequenceEqual(x,y) 因为我希望它基于Object.Equals(x,y) 方法,如果 x 或 y 为 null,则返回 false,如果两者均为
我正在尝试使用 Type.GetMethod(...) 获取 Enumerable.SequenceEqual 的 MethodInfo。到目前为止,我已经尝试了以下方法: var mi = type
来自 MSDN The SequenceEqual(IEnumerable, IEnumerable) method enumerates the two source sequences in pa
我有 2 个数组: int[] arr1 = new int[] { 1, 2, 3 }; int[] arr2 = new int[] { 1, 2, 3 }; 我需
我是一名优秀的程序员,十分优秀!