2011-08-05 311 views

回答

82

這是條件運算符表達式。

(condition) ? [true path] : [false path]; 

例如

string value = someBooleanExpression ? "Alpha" : "Beta"; 

所以,如果布爾表達式爲true,值將舉行 「阿爾法」,否則,它擁有 「測試版」。

對於人們常見的陷阱,請參閱this question中的C# tag wiki

+1

value == someBooleanExpression –

+7

@YuZhang:不,它是正確的。例如: string value = 1 == 2? 「Alpha」:「Beta」; - >價值將持有「測試版」 –

13

這是三元conditional operator

如果?之前括號內的條件爲真,則會將值返回到:的左側,否則將值返回到右側。

1

在您所提供的特定情況下,這是一個有條件分配。問號(?)前面的部分是一個布爾條件,冒號(:)兩邊的部分是根據條件結果賦值的值(冒號的左邊是true的值,右一邊是虛假的價值)。

1
string requestUri = _apiURL + "?e=" + OperationURL[0] + ((OperationURL[1] == "GET") ? GetRequestSignature() : ""); 

可以翻譯成:

string requestUri=""; 
if ((OperationURL[1] == "GET") 
{ 
    requestUri = _apiURL + "?e=" + GetRequestSignature(); 
} 
else 
{ 
    requestUri = _apiURL + "?e="; 
} 
0

這意味着如果 「OperationURL [1]」 的計算結果爲 「GET」,然後返回 「GetRequestSignature()」 否則返回 「」。我猜「GetRequestSignature()」在這裏返回一個字符串。語法CONDITION?答:B 基本上代表了一個if-else,其中當CONDITION爲真時返回A,而當CONDITION爲假時返回B.

1

這也被稱爲「inline if」,或者如上面的三元運算符。 https://en.wikipedia.org/wiki/%3F

它被用來減少代碼,但不建議在一行中使用很多這些代碼,因爲它可能會使維護代碼變得非常困難。 試想:

a = b?c:(d?e:(f?g:h)); 

,你可以去上一段時間。

它結束了基本相同寫作:

if(b) 
    a = c; 
else if(d) 
    a = e; 
else if(f) 
    a = g; 
else 
    a = h; 

在你的情況, 「串requestUri = _apiURL + 」E =「 + OperationURL [0] +((OperationURL [1] ==」? GET「)?GetRequestSignature():」「);」

也可以寫爲:(省略的東西,因爲它是一個空字符串)

string requestUri = _apiURL + "?e=" + OperationURL[0]; 
if((OperationURL[1] == "GET") 
    requestUri = requestUri + GetRequestSignature(); 

或像這樣:

string requestUri; 
if((OperationURL[1] == "GET") 
    requestUri = _apiURL + "?e=" + OperationURL[0] + GetRequestSignature(); 
else 
    requestUri = _apiURL + "?e=" + OperationURL[0]; 

根據您的喜好/代碼風格你的老闆告訴你使用。