2013-12-18 51 views
1

我的代碼是這樣的:錯誤使用條件運算符

if (statusCode== "1") 
{ 
    statusCode = productStatusItemAvailable1; 
} 
else if(statusCode =="2") 
{ 
    statusCode = productStatusItemOutOfStock1; 
} 
else if(statusCode =="3") 
{ 
    statusCode = productStatusItemAvailableOnRemoteDate1; 
} 
else if(statusCode =="4") 
{ 
    statusCode = productStatusAlternativeItemAvailable1; 
} 
else if(statusCode =="5") 
{ 
    statusCode = productStatusItemSoldOutAndOurSuppliersHaveNoAvailable; 
} 
else if(statusCode =="6") 
{ 
    statusCode = productStatusItemSoldOutContactCustomerService1; 
} 

爲了使它有點更具可讀性和易於處理我嘗試申請三元運算符

statusCode == "1" ? productStatusItemAvailable1: "2" ? productStatusItemOutOfStock1 : "3" ? productStatusItemAvailableOnRemoteDate1 : "4" ? productStatusAlternativeItemAvailable1 : "5" ? productStatusItemSoldOutAndOurSuppliersHaveNoAvailable : "6" ? productStatusItemSoldOutContactCustomerService1; 

但是,這顯示了一個錯誤

不能隱字符串轉換爲布爾。

我在做什麼錯?還是不可以使用字符串?

+4

三元運算符的意思是「一個與運營商:

var statusCodes = new Dictionary<string, string>{}; statusCodes.Add("1", productStatusItemAvailable1); // For each message 

現在你可以使用鍵獲取每個消息三個操作數「。如果你想鏈整個系列的三元運營商一起通過一個針對一組值一比較,你可能不使用三元條件運算符如預期。您應該使用開關/外殼。 – BoltClock

+1

那麼你是不是檢查是否'的StatusCode ==第二個「2」'你只說是「2」真正的,這是無意義的 –

+1

哇。你有沒有聽說過'switch'? – CompuChip

回答

4

正如指出的那樣,你不檢查對字符串的值。這就是說,你一定要使用switch語句是:

switch(statusCode) 
{ 

    case "1": 
     // do some stuff 
    break; 

    // etc... 
} 

雖然理想,statusCode應該是其中每個值對應於錯誤的枚舉,它會使你的代碼更清晰。

3

你需要爲每個條件

statusCode == "1" ? product1 : statusCode == "2" ? product2一個statuscode == ...等

+0

他沒有分配返回值。 –

3

?: Ternary的sintaxe是:

object result = bool ? object : object; 

在你的代碼,你沒有在:範圍確定後,任何東西,使用這樣的,你可以定義:陸續三元範圍,並再次應用它,是這樣的:

statusCode = statusCode == "1" ? productStatusItemAvailable1 : 
       statusCode == "2" ? productStatusItemOutOfStock1 : 
       statusCode == "3" ? productStatusItemAvailableOnRemoteDate1 : 
       statusCode == "4" ? productStatusAlternativeItemAvailable1 : 
       statusCode == "5" ? productStatusItemSoldOutAndOurSuppliersHaveNoAvailable : 
       statusCode == "6" ? productStatusItemSoldOutContactCustomerService1 
       : stirng.Empty; 

最後的:三元組的範圍,就像是最後的else表示if結構的表述。你必須定義一個值作爲它default值,因爲它是三元運算符的結構的一部分。

1

你可能會更好使用switch statement,或字典:

// Will return value of productStatusItemAvailable1: 
var result = statusCodes["1"];