初级三元运算符用法:
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" :
"";