C#条件运算符-如果条件为true,则调用方法,否则不执行任何操作



C#提供了条件运算符(?:(,该运算符根据布尔表达式的值返回两个值中的一个。例如

condition ? first_expression : second_expression;

我的问题是,当条件为true时,我们可以使用相同的语法来调用方法吗?当条件为假时,则不执行

 public void Work(int? val)
 {
   var list = new List<int>();
   //ofcourse line below doesn't work
   //but is it possible to call method when condition is true and else do  nothing
   val.HasValue? list.Add(val.value) : else do nothing
} 

?:在过去也被称为三元运算符。三元,三元。如果这样,那么就这样做,否则就这样做。

你有两个表达式。如果这样,就这样做。这正是if语句的要点。你正试图将你的案例融入一个并非为之设计的结构中不要这样做

对作业使用正确的操作:

if(val.HasValue)
{
    list.Add(val.value)
}

C#条件运算符用于根据条件的求值返回不同的值。它并不意味着习惯于以你在问题中试图的方式使用。它应该这样使用:

int test = i > 3 ? 0 : 1;

如果i小于(或等于(3,那么test将等于0,或者如果3大于3,则test将等于1。

要想做你想做的事,你必须使用一个常规的if语句(顺便说一句,你仍然可以写在一行中(:

if (val.HasValue) list.Add(val.value);

条件/三元运算符应该返回一个值,而这个非常特定的值必须分配回某个地方。

所以,在这种情况下,你可以这样做,是的。但是,这会导致糟糕的设计。

在通常的情况下,人们会这样做:

int x = (a > b) ? a : b;

现在,假设当条件呈现为true时,AddToList((是您想要的方法,而当条件变成false时,DoRest((是要调用的方法。

在前面提到的情况下,你最终会做这样的事情:

int result = val.HasValue? AddToList(val.value) : DoRest(); 

现在,您必须依靠result来确定调用了哪一个(如果您需要的话(,而且它不是很有表现力,也没有指向正确的代码设计。

如果你有点冒险精神,你最终会得到:

var actionToInvoke = val.HasValue ? (Action)AddToList: (Action)DoRest;
actionToInvoke();

无论如何,这些都不会产生可读性很强的代码。

因此,坚持使用简单的if(val.HasValue)将是最简单的方法。

null条件运算符的工作方式是,您必须为要分配给它的变量返回一个值。因此,如果您想要一个字符串值或void以外的其他值,则可以调用该方法而不会出现任何问题。但是要调用void方法,可以使用委托。

  delegate void DelMethod();
        void Method() { }
        void MethodTwo() { }
        private void MyMethod()
        {
            DelMethod x;
            x = condition == true ? (DelMethod)Method : (DelMethod)MethodTwo;
        }

最新更新