如何将一个Object(即一个数组)转换回一个数组(或更通用的东西)?

ste*_*ema 2 c# arrays casting

我想要一个带有两个对象的比较方法,如果它们相等或不相等则返回.

在方法内部,我区分不同的数据类型,以将适当的比较方法应用于对象.

问题是,我切换了两个数组(例如int [])并想立即使用SequenceEqual(),所以我必须将对象更改为可以SequenceEqual()正确应用于它们的通用序列/列表/数组.

目前我还没有如何正确地将数据类型更改为通用的数据类型.

一个IEnumerable<object>本来的方法SequenceEqual(),但如果我不这样说,sourcetestnull.

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()

Lee*_*Lee 6

Array实现IEnumerable所以你可以这样做:

IEnumerable<object> source = ((IEnumerable)o1).Cast<object>();
IEnumerable<object> test = ((IEnumerable)o2).Cast<object>();
Run Code Online (Sandbox Code Playgroud)