2013-12-18 52 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"];