c# - 此 lambda 代码有问题,不会在所有情况下都返回值

标签 c# lambda delegates

我正在从事一个需要使用一些 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/

相关文章:

c# - 请解释!SyncBlk windbg命令

c# - 如何使用 NAudio 正确地将淡出写入 WAV 文件?

c# - 如何将点转换为本地坐标?

c++ - 在 C++ 中组合两个 lambda

lambda - java 8 lambda 的懒惰但持久的评估

c++ - 在 MSVC++14 上的 C++11 中难以置信的快速委托(delegate)

c# - WinForms 将非透明字符串绘制成透明窗体

kotlin - 如何将字符串映射到函数并稍后调用它

c# - 如何调用Action<>修改winforms控件

ios - 关于 "Declaration is only valid at file scope"