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

时间:2016-08-23 17:04:47

标签: c#

C#提供conditional operator (?:),它返回两个值中的一个,具体取决于布尔表达式的值。例如

condition ? first_expression : second_expression;

我的问题是,当条件为真时,我们可以使用相同的语法来调用方法吗?当条件为假时,则什么都不做

 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
} 

4 个答案:

答案 0 :(得分:5)

<xsl:strip-space elements="*"/>过去也被称为三元运算符。三元,三个。如果这样,那么这样做,否则就这样做。

你有两个表达方式。如果是这样,请这样做。这正是?:语句的要点。您正在尝试将您的案例融入不是为其设计的构造中。 不要这样做

对作业使用正确的操作:

if

答案 1 :(得分:2)

C#条件运算符用于根据条件的评估返回不同的值。它并不意味着习惯于在您的问题中尝试使用。它应该用于此:

int test = i > 3 ? 0 : 1;
如果test小于(或等于)3,则

i将等于0,如果3大于3,则test将等于1。

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

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

答案 2 :(得分:2)

条件/三元运算符应该返回一个值,并且必须将非常具体的值分配回某个地方。

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

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

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)将是最简单的方法。

答案 3 :(得分:1)

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

  delegate void DelMethod();

        void Method() { }

        void MethodTwo() { }

        private void MyMethod()
        {

            DelMethod x;

            x = condition == true ? (DelMethod)Method : (DelMethod)MethodTwo;

        }