-4

有没有办法使用?: c# 中的表示法,在 ? 之后没有分配表达式的结果,甚至没有分配表达式的结果。运算符,不返回任何值。

例如,我想运行类似的东西

(1=1) ? errorProvider.SetError(control,"Message") : DoNothing();

expression? DoSomething (): DoSomethingElese()

其中 DoSomething 和 DoSomethingElse 返回的类型是无效的。

4

4 回答 4

4

不。

?:根据boolean条件返回一个值。您不能void在表达式中使用。

只需使用if

   if (expression) {
        DoSomething();
   } else {
        DoSomethingElse();
   }

http://msdn.microsoft.com/en-us/library/ty67wk28(v=vs.110).aspx

于 2013-06-25T10:13:28.327 回答
3

不,三元运算符的全部意义在于它返回了一些东西。换句话说:表达式必须有一个返回类型(除了void)。在这种情况下,您只需要使用if/else构造。

于 2013-06-25T10:12:47.643 回答
2

最接近的方法是扩展布尔类型:

public static void IIF(this bool condition, Action doWhenTrue, Action doWhenFalse)
{
    if (condition)
        doWhenTrue();
    else
        doWhenFalse();
}

然后你赢得了一个单线:

(1 == 1).IIF(() => DoSomething(), () => DoSomethingElse());
于 2013-06-25T10:34:54.893 回答
1

正如其他人所说,你不能 - If/Else 将是正确的选择。不过,在您的示例中,您可以执行以下操作:

errorProvider.SetError(control, SomeCondition ? "Message" : string.Empty) 
于 2013-06-25T10:18:48.427 回答