如何使用LINQ转换以下内容?
foreach (int[] arr in jaggedArray)
{
if (arr[7] == 1)
{
if (!CheckThis(arr))
boolSuccess = false;
else
intCount++;
}
}
答案 0 :(得分:1)
这样的事情:
var filtered = jaggedArray.Where(arr => arr[7] == 1);
var intCount = filtered.Where(ar => CheckThis(ar)).Count()
var boolSuccess = filtered.Count() == intCount;
答案 1 :(得分:0)
必须为相同的逻辑编写嵌套查询,否则必须首先简化源代码逻辑以获得简单的查询
答案 2 :(得分:0)
我使用ReSharper,这表明Linq表达式更好 - 并执行翻译。有时候,当Linq过于复杂且难以理解时,我会保留我的代码。
答案 3 :(得分:0)
我相信这会有效:首先,它通过获取满足intCount
的所有项目并传递arr[7]==1
方法来设置CheckThis()
。这应该是您的intCount
值。
然后,如果intCount
中的值与数组的长度不匹配,则至少有一件事失败,因此您可以将boolSuccess
设置为false。
请注意,我认为这个解决方案更聪明,更不易阅读。不太可读是一件坏事。另外,你可以轻松地重构你现有的方法,而这样做会因为Cleverness Factor而难以重构。
intCount = jaggedArray.Where(x => x[7] == 1).Where(CheckThis).Count();
if (intCount != jaggedArray.Length) boolSuccess = false;
答案 4 :(得分:0)
你可以使用Array.ForEach,虽然我认为你开始时实际上更清楚
Array.ForEach(jagged, arr =>
{
if (arr[7] == 1)
{
if (!CheckThis(arr))
{
boolSuccess = false;
}
else
{
intCount++;
}
}
});
答案 5 :(得分:0)
intCount += jaggedArray
.Where(arr => arr[7] == 1)
.Select(arr =>
{
int val = CheckThis(arr) ? 1 : 0;
if (val == 0) {boolSuccess = false;}
return val;
}).Sum()