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

初级三元运算符用法:

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":"";

换行一下,就是

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






你可能感兴趣的:(C#,三元运算符)