【发布时间】:2021-09-10 12:09:33
【问题描述】:
我正在尝试比较 C# 中的两个数组,如上一篇 SO 帖子中所述:
为什么以下对我不起作用:
var first = Value as Array;
var second = other.Value as Array;
bool equal = first.SequenceEqual(second);
我明白了:
CS1061:“Array”不包含“SequenceEqual”的定义和 没有可访问的扩展方法“数组”接受第一个参数 可以找到类型“数组”(您是否缺少 using 指令或 程序集参考?)。
我确实有权在顶部使用:
using System.Linq;
因为我会写(没有编译器错误):
var first = Value as string[];
var second = other.Value as string[];
bool equal = first.SequenceEqual(second);
作为参考,我正在尝试为通用值类型实现 Equals 运算符:
public struct MyValue<T> : IEquatable<MyValue<T>>
{
public T Value { get; set; }
public bool Equals(VRValue<T> other) => throw new NotImplementedException();
}
【问题讨论】:
-
Array实现了IEnumerable,但SequenceEqual仅为IEnumerable<T>定义 -
与其检查
Array,更好的方法是检查IStructuralEquatable,这是Array(和其他一些集合)实现的。 -
您可以通过转换其元素来使用带有
Array的 Linq,例如bool equal = first.Cast<object>().SequenceEqual(second.Cast<object>());
标签: c# arrays linq generics equality