C# 在 lambda 表达式中切换

标签 c# lambda expression-trees switch-statement

是否可以在 lambda 表达式中使用 switch?如果不是,为什么? Resharper 将其显示为错误。

最佳答案

您可以在语句 block 中使用 lambda:

Action<int> action = x =>
{
  switch(x)
  {
    case 0: Console.WriteLine("0"); break;
    default: Console.WriteLine("Not 0"); break;
  }
};

但是你不能在“单一表达式 lambda”中这样做,所以这是无效的:

// This won't work
Expression<Func<int, int>> action = x =>
  switch(x)
  {
    case 0: return 0;
    default: return x + 1;
  };

这意味着您不能在表达式树中使用 switch(至少由 C# 编译器生成;我相信 .NET 4.0 至少在库中支持它)。

关于C# 在 lambda 表达式中切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1432941/

相关文章:

c# - 如何创建子对象的 Expression.Property

java - 求解二叉树

c# - 如何在对象的表达式中分配 <T> 的表达式?

javascript - 如何使这个书架网格具有拖动/选择功能?

c# - 将 var 作为 T 参数传递

python - lambda 中的条件

JavaFX 回调 Lambda

c# - 如何处理使用(Py.GIL()) block pythonnet中的异常

c# - 处理任何类型的方法

c# - EF : The underlying provider failed on Open