我正在从事一个需要使用一些 Lambda 的项目。我正在尝试创建一个将插入两个字符串和一个 int 的字符串,如果这两个字符串相同,则为 int++。这是我的代码:
DelegateName tally = (x, y, z) => { if (x == y) z++; };
我了解并非所有代码路径都返回一个值,但我不确定该往哪个方向修复它。如果 x 字符串与 y 字符串相同,我基本上会运行 12 次,以便将计数添加到 12 个变量之一。它正在计算匹配字符串的数量并将其添加到适当的变量(int)
这是我试图用 lambda 替换的代码:
if (cellValue.ToString().Substring(0, 1) == "1")
{
variable1++;
}
希望通过调用 tally(cellValue.ToString().SubString(0,1), 1, variable1) 来清理它
最佳答案
你的 variable1
是一个 int
(一个 Value type )所以当你把它作为参数传递时,你实际上传递了它的值,所以在你的 tally
lambda 会有另一个 int
变量z
,它独立于variable1
。因此,当您在 tally
中执行 z++
时,您的 variable1
不会改变。
如果你的 tally
定义在 variable1
附近,你可以在你的 lambda 中使用它:
var variable1 = 0;
DelegateName tally = (x, y) => { if (x == y) variable1++; };
foreach (var cellValue in cells)
tally(cellValue.ToString().SubString(0,1), "1");
另一种方式是 LINQ :
using System.Linq;
var variable1 = cells.Select(c => c.ToString().FirstOrDefault()).Count(c => c == '1');
// or even better (thx @RufusL)
var variable2 = cells.Count(c => c.ToString().StartsWith("1"));
关于c# - 此 lambda 代码有问题,不会在所有情况下都返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54432845/