我想要一个带有两个对象的比较方法,如果它们相等或不相等则返回.
在方法内部,我区分不同的数据类型,以将适当的比较方法应用于对象.
问题是,我切换了两个数组(例如int [])并想立即使用SequenceEqual(),所以我必须将对象更改为可以SequenceEqual()正确应用于它们的通用序列/列表/数组.
目前我还没有如何正确地将数据类型更改为通用的数据类型.
一个IEnumerable<object>本来的方法SequenceEqual(),但如果我不这样说,source和test是null.
public static bool Compare(this object o1, object o2)
{
if (o1 is Array && o2 is Array)
{
// special array handling
IEnumerable<object> source = o1 as IEnumerable<object>;
IEnumerable<object> test = o2 as IEnumerable<object>;
// this fails now, because source and test are null.
return source.SequenceEqual(test);
}
else
{
return o1.Equals(o2);
}
}
Run Code Online (Sandbox Code Playgroud)
Compare() 是Object的Extension方法,所以我这样做来调用它:
int[] a = new int[] { 1, 2, 3 };
int[] b = new int[] { 1, 2, 3 };
a.Compare(b);
Run Code Online (Sandbox Code Playgroud)
我需要做什么来处理两个对象,即数组,作为数组,以便我可以使用SequenceEqual()?
Array实现IEnumerable所以你可以这样做:
IEnumerable<object> source = ((IEnumerable)o1).Cast<object>();
IEnumerable<object> test = ((IEnumerable)o2).Cast<object>();
Run Code Online (Sandbox Code Playgroud)