C# 二维数组的LINQ.Any()迭代器-[,]

C# 二维数组的LINQ.Any()迭代器-[,],c#,arrays,linq,C#,Arrays,Linq,使用LINQ处理2D阵列的正确方法是什么 int[,] array = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; bool anyZeroes = array.Any(value => value == 0) // example 我想检查数组中是否有任何变量与本例中的Func,==0匹配。我如何使用Any,这里的最佳做法是什么?这里有一种方法,您可以将列表展平以进行检查 bool anyZeroes = ar

使用LINQ处理2D阵列的正确方法是什么

int[,] array =
{
    { 1, 2, 3 },
    { 4, 5, 6 },
    { 7, 8, 9 }
};

bool anyZeroes = array.Any(value => value == 0)     // example

我想检查数组中是否有任何变量与本例中的
Func
==0
匹配。我如何使用
Any
,这里的最佳做法是什么?

这里有一种方法,您可以将列表展平以进行检查

bool anyZeroes = array.Cast<int>().Any(value => value == 0);// false
bool anyNines = array.Cast<int>().Any(value => value == 9);// true
bool anyZeroes=array.Cast().Any(value=>value==0);//假的
bool anyNines=array.Cast().Any(value=>value==9);//真的
但是,如果您拨打多个电话,则应将其存储:

bool casted = array.Cast<int>();
bool anyZeroes = casted.Any(value => value == 0);// false
bool anyNines = casted.Any(value => value == 9);// true
boolcasted=array.Cast();
bool anyZeroes=casted.Any(值=>值==0);//假的
bool anyNines=casted.Any(value=>value==9);//真的

参考资料:

这段代码是编译的还是应该表明您的意图?我希望它是这样写的。好的。我很确定它不起作用,因为你得到的向量样式数组(2D,不管你想叫它什么)没有实现
IEnumerable
,这意味着这是不可能的。是的。。。它重复的问题解释了这一点。就我个人而言,我只是避免使用
[,]
类型的数组。我从未见过这样的例子,它们比
列表
或数组更合适或更有用。当你有一个固定大小的“网格”,比如在2D棋盘游戏中,你还应该使用什么?
列表
误导性地建议可以添加项目,这将导致未定义的行为。哇,太简单了!为什么我自己没有想到这一点?谢谢:对于我来说,多dimm阵列能够如此轻松地“展平”有点违反直觉。我最初认为它更像是一个
列表
,并尝试在其上执行
SelectMany()
,但这不起作用。我猜
Cast()
只是把它变成了一个
IEnumerable
,LINQ可以更好地处理它