使用Linq执行数组属性比较的优雅方法

时间:2015-03-11 14:56:26

标签: c# .net linq

有关如何使用Linq执行以下代码的任何线索?

for (Int32 i = 0; i < array1.Count; ++i)
{
    if (!array1[i].Name.Equals(array2[i].Name, StringComparison.OrdinalIgnoreCase))
        return false;
}

3 个答案:

答案 0 :(得分:3)

可能值得仔细检查以确保array1array2至少与bones一样长。计数......所以

Enumerable
 .Range(0, new[] {bones.Count, array1.Length, array2.Length}.Min())
 .All(i => array1[i].Name.Equals(array2[i].Name, StringComparison.OrdinalIgnoreCase))

答案 1 :(得分:0)

array1.All((a, i) => a.Name.Equals(array2[i].Name, StringComparer.OrdinalIgnoreCase);

答案 2 :(得分:0)

如果您想知道数组中的所有名称是否相同,您可以使用相同的索引:

bool allEqualNamesAtSamePosition = array1
    .Zip(array2, (arr1, arr2) => new { arr1, arr2 })
    .All(x => string.Equals(x.arr1.Name, x.arr2.Name, StringComparison.OrdinalIgnoreCase));

但通常我更喜欢普通的for - 循环,如果某些东西取决于索引。在我看来,LINQ甚至会降低可读性。