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":"";
換行一下,就是
p = t.str == "1" ? "11" :
t.str == "2" ? "22" :
t.str == "3" ? "33" :
"";
此處原文:歡迎傳播,請標明出處。 C 三元運算子
格式 正如名字表示 條件表示式 表示式1 表示式2。說明 問號前面的位置是判斷的條件,判斷結果為bool型,為true時呼叫表示式1,為false時呼叫表示式2。三元運算子語法 條件表示式 表示式1 表示式2 int a 5 string str a 10?a大於10 a小於10 輸出為 a小於10...
三元運算子
根據條件執行兩個語句中的其中乙個。test?語句1 語句2引數 test 任何boolean 表示式。語句1當 test 是true時執行的語句。可以是復合語句。語句2當 test 是false時執行的語句。可以是復合語句。說明?運算子是if.else語句的快捷方式。它通常被用作較大表示式的一部分,...
三元運算子
先定義a和b 兩個數比較 int a 123 int b 144 通過定義big來反映a和b誰更小 int big a b?a b 通過定義small來反映a和b誰更小 int small asystem.out.println a和b之間較大的數 big system.out.println a和...