【问题标题】:Ternary operator inside Action<T> not workingAction<T> 中的三元运算符不起作用
【发布时间】:2025-12-14 00:20:05
【问题描述】:

有一个 Action 委托并尝试在其中使用三元运算符和 lambda:

Action<string> action = new Action<string>( str => (str == null) ? 
               Console.WriteLine("isnull") : Console.WriteLine("isnotnull")

给出旧的“只允许赋值、递减等”错误。

这有可能吗?

【问题讨论】:

    标签: c# delegates lambda ternary-operator


    【解决方案1】:

    你必须这样做:

    var action = new Action<string>(str => Console.WriteLine((str == null) ? "isnull" : "isnotnull"));
    

    【讨论】:

      【解决方案2】:
      Action<string> action = new Action<string>( str => 
                          { 
                              if (str == null)
                                 Console.WriteLine("isnull");
                              else
                                 Console.WriteLine("isnotnull");
                          });
      

      【讨论】:

      • 你确定吗?我认为这会吐出一些关于“空隙”不相等或类似的东西......
      • 这个问题是关于三元运算符的。
      • 啊啊,这样更好,刚刚得到您的编辑!是的,这也行。
      • @Bala 是的,但他问“这可能吗?”
      【解决方案3】:

      我相信三元运算符必须返回一些东西。在你的情况下,它没有返回任何东西,只是执行一个语句。正如 Reddog 所说,您必须将三元组放在 Console.WriteLine 调用中,这实际上是更少的代码:)

      【讨论】:

        【解决方案4】:

        问题不在于 lambda,而在于三元运算符中的第二个和第三个表达式必须返回一些东西。 Console.WriteLine 具有 void 返回类型,不能像您尝试的那样使用。解决方法是将三元运算符放在对Console.WriteLine的调用中:

        Console.WriteLine(str == null ? "isnull" : "isnotnull")
        

        您可以在 lambda 中使用此表达式。

        【讨论】: