将两个对象比较为Array;

时间:2015-12-02 16:30:16

标签: c#

如何比较两个可能是两个数组的对象。

  var arrayServer = serv as Array;
  var arrayLocal = local as Array;

我现在不知道为什么,但我不能将{Sequence 1qual}用于arrayServerarrayLocal

3 个答案:

答案 0 :(得分:3)

  

我无法将SequenceEqual用于arrayServerarrayLocal

这是因为Array没有实现IEnumerable<T>所必需的SequenceEqual。我将转换为IEnumerable<T>T是集合项的适当类型)而不是转换为数组:

var arrayServer = serv as IEnumerable<{type}>;
var arrayLocal = local as IEnumerable<{type}>;

或使用Cast

var arrayServer = serv.Cast<{type}>();
var arrayLocal = local.Cast<{type}>();

答案 1 :(得分:0)

SequenceEqual是LINQ方法之一,它作为通用IEnumerable<T>的扩展实现。 Array没有实现IEnumerable<T>,但您可以通过调用IEnumerable<T>OfType来获取通用Cast

bool areEqual = arrayLocal.Cast<theType>().SequenceEqual(arrayServer.Cast<theType>());

答案 2 :(得分:0)

要比较2个数组的元素,可以使用循环:

bool itemsEqual = true;
int i = 0;
while(itemsEqual && i < arrayServ.Count)
{
    if(arrayServ[i].Equals(arrayLocal[i])
    {
        i++;
        continue;
    }
    itemsEqual = false;
    return itemsEqual;
}
return itemsEqual;

这将遍历serv数组并将项目与同一索引处的本地项目进行比较。如果所有这些都是平等的,那么什么都不会发生,并且会返回真实的。如果任何比较返回false,则返回false。虽然使用数组并不是很有趣。