C#三元运算符?:高级点的用法

C#中有一个三元运算符“?:”,语法为:条件表达式?表达式1:表达式2;
该操作首先求出条件表达式的值(bool类型),为true时调用表达式1,为flase时调用表达式2。其逻辑为:“如果为真执行第一个,否则执行第二个。”
例如:

a=3>4?3:4;输出为4。
a=3<4?3:4;输出为3。

初级三元运算符用法:

p=bool?A:B

当bool=true,p=表达式A,当bool=false,p=表达式B。

那么当你遇到?:?:时,不要楞,三元运算符也是可以嵌套的。

用AForge.net时,有代码如下:

var population = new Population(populationSize,
                new PermutationChromosome(citiesCount), 
                fitnessFunction,
                (selectionMethod==0)?(ISelectionMethod)new EliteSelection():
                (selectionMethod==1)?(ISelectionMethod)new RankSelection():
                (ISelectionMethod)new RouletteWheelSelection()
                );

当看到,

(selectionMethod==0)?(ISelectionMethod)new EliteSelection():
                (selectionMethod==1)?(ISelectionMethod)new RankSelection():
                (ISelectionMethod)new RouletteWheelSelection()

时,直接楞了,发觉,三元运算符似乎也可以嵌套。上面代码的作用是,根据selectionMethod的取值,选择需要的算法。

        /**
         * 0:EliteSelection算法
         * 1:RankSelection算法
         * 其他:RouletteWheelSelection算法
         */

这样的话,嵌套后的理解就方便了。

网上也有如下例子:

            Test t = new Test();
            if (t.str == "1")
                p = "11";
            else if (t.str == "2")
                p = "22";
            else if (t.str == "3")
                p = "33";

那么用三元运算符嵌套就是:

p = t.str == "1" ? "11":((t.str == "2") ? "22":"33");

因为运算符的优先级限制,也可以写成如下方式:

 p=t.str == "1"?"11":t.str == "2"?"22":t.str == "3"?"33":"";

换行一下,就是

扫描二维码关注公众号,回复: 5658058 查看本文章
   p = t.str == "1" ? "11" :
          t.str == "2" ? "22" : 
          t.str == "3" ? "33" : 
          "";

此处原文:欢迎传播,请标明出处。 https://blog.csdn.net/u201011221/article/details/24671229

猜你喜欢

转载自blog.csdn.net/qq_40128550/article/details/88679846
今日推荐