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

C# C条件运算符-如果条件为true,则调用方法,否则不执行任何操作,c#,C#,C提供了根据布尔表达式的值返回两个值中的一个。乙二醇 状况?第一个表达式:第二个表达式 我的问题是,当条件为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 conditio

C提供了根据布尔表达式的值返回两个值中的一个。乙二醇

状况?第一个表达式:第二个表达式

我的问题是,当条件为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
} 

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

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

要想做你想做的事情,你必须使用一个常规的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);
在过去?:也被称为三元运算符。三元,三元。如果是这样,那么就这样做,否则就这样做

你有两种表达方式。如果是这样,就这样做。这正是if语句的要点。您正试图将您的案例整合到它不是为之设计的结构中。不要这样做

对作业使用正确的操作:

if(val.HasValue)
{
    list.Add(val.value)
}
在过去?:也被称为三元运算符。三元,三元。如果是这样,那么就这样做,否则就这样做

你有两种表达方式。如果是这样,就这样做。这正是if语句的要点。您正试图将您的案例整合到它不是为之设计的结构中。不要这样做

对作业使用正确的操作:

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

条件/三元运算符应该返回一个值,并且必须将非常特定的值赋回到某个位置

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

在一般情况下,可以这样做:

int x = (a > b) ? a : b;
现在,假设AddToList是条件呈现为true时所需的方法,DoRest是条件为false时要调用的方法

在上述情况下,您最终会执行以下操作:

int result = val.HasValue? AddToList(val.value) : DoRest(); 
现在,如果您需要的话,您必须依靠result来确定调用了哪一个,而且它不是很有表现力,也没有指向正确的代码设计

如果你变得更具冒险精神,你最终会得到:

var actionToInvoke = val.HasValue ? (Action)AddToList: (Action)DoRest;
actionToInvoke();
在任何情况下,这些都不会导致非常可读的代码


因此,坚持使用简单的ifval.HasValue是最简单的方法。

条件/三元运算符应该返回一个值,并且必须将非常特定的值赋回到某个位置

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

在一般情况下,可以这样做:

int x = (a > b) ? a : b;
现在,假设AddToList是条件呈现为true时所需的方法,DoRest是条件为false时要调用的方法

在上述情况下,您最终会执行以下操作:

int result = val.HasValue? AddToList(val.value) : DoRest(); 
现在,如果您需要的话,您必须依靠result来确定调用了哪一个,而且它不是很有表现力,也没有指向正确的代码设计

如果你变得更具冒险精神,你最终会得到:

var actionToInvoke = val.HasValue ? (Action)AddToList: (Action)DoRest;
actionToInvoke();
在任何情况下,这些都不会导致非常可读的代码


因此,坚持使用简单的ifval.HasValue将是最简单的方法。

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

  delegate void DelMethod();

        void Method() { }

        void MethodTwo() { }

        private void MyMethod()
        {

            DelMethod x;

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

        }

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

  delegate void DelMethod();

        void Method() { }

        void MethodTwo() { }

        private void MyMethod()
        {

            DelMethod x;

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

        }

你为什么要那样?只需使用一个简单的if.yes你可以做到…@TylerNichols这将是有趣的,看看你将如何做到这一点。。。当您不能使用时?:如果不将结果分配给要开始的内容,我可以看到您想要这样做,如果您想要进行内联if条件检查并设置变量或默认值,但对于方法,只需使用简单的if条件。您尝试过这一点吗?我想你应该在问我为什么要那样做之前先努力一下?只需使用一个简单的if.yes你可以做到…@TylerNichols这将是有趣的,看看你将如何拉它o
ff。。。当您不能使用时?:如果不将结果分配给要开始的内容,我可以看到您想要这样做,如果您想要进行内联if条件检查并设置变量或默认值,但对于方法,只需使用简单的if条件。您尝试过这一点吗?我想你应该在问之前努力一下OP的名字是对的。这是条件运算符,不是三元运算符。它是一个三值运算符,因为它接受三个操作数,就像+-*/等。它们都是二进制运算符,因为它们接受两个操作数。@Servy看起来像是VS2010之后的运算符。我仍然可以互换使用这些术语,page称之为条件运算符。它没有说名字已经改了。OP的名字是对的。这是条件运算符,不是三元运算符。它是一个三值运算符,因为它接受三个操作数,就像+-*/等。它们都是二进制运算符,因为它们接受两个操作数。@Servy看起来像是VS2010之后的运算符。我仍然可以互换使用这些术语,page称之为条件运算符。它并没有说名字已经改了。谢谢大家的回复。这真是个好消息。我以更一般的方式问了这个问题,看看是否可以调用条件运算符中的任何方法。但对于这个特定的场景,我最终在列表上创建了一个扩展方法,该方法在添加公共静态void addifnotnulllist列表之前检查值是否为null,TValue val{if val!=null{list.Addval;}}}感谢大家的回复。这真是个好消息。我以更一般的方式问了这个问题,看看是否可以调用条件运算符中的任何方法。但对于这个特定的场景,我最终在列表上创建了一个扩展方法,该方法在添加公共静态void AddIfNotNullthis list列表之前检查值是否为null,TValue val{if val!=null{list.Addval;}},而仅代码的答案不被禁止,请理解,这是一个问答社区,而不是一个众包社区,通常情况下,如果OP了解作为答案发布的代码,他/她会自己提出类似的解决方案,并且不会在一开始发布问题。同样的原则也适用于未来可能不熟悉所呈现代码的读者。因此,请通过解释其工作原理和/或原因,为您的答案和/或代码提供上下文。@全能者对此表示抱歉。我认为这是一个容易理解的代码。尽管如此,别误会我的意思;它是!然而,这很容易理解,只适用于熟悉编程语言、原理和/或所用方法的人。这并不是所有人,或者如果提供一个简单的代码解释,至少没有那么多人。这就是为什么只有代码的答案在SO中没有被完全禁止,但仍然不被推荐的原因之一,即使对于基本代码也是如此=-无论如何,我想你本可以解释得更好,但这是一个好的开始+1表示努力。虽然只回答代码是不被禁止的,但请理解这是一个问答社区,而不是一个众包社区,并且,通常,如果OP理解代码作为答案发布,他/她会自己想出类似的解决方案,并且一开始就不会发布问题。同样的原则也适用于未来可能不熟悉所呈现代码的读者。因此,请通过解释其工作原理和/或原因,为您的答案和/或代码提供上下文。@全能者对此表示抱歉。我认为这是一个容易理解的代码。尽管如此,别误会我的意思;它是!然而,这很容易理解,只适用于熟悉编程语言、原理和/或所用方法的人。这并不是所有人,或者如果提供一个简单的代码解释,至少没有那么多人。这就是为什么只有代码的答案在SO中没有被完全禁止,但仍然不被推荐的原因之一,即使对于基本代码也是如此=-无论如何,我想你本可以解释得更好,但这是一个好的开始+1.谢谢你的努力。