我的代码是这样的:
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;
但这显示错误
无法将字符串隐式转换为bool。
我做错了什么?或者是否无法使用字符串?
答案 0 :(得分:4)
正如所指出的,您没有检查字符串的值。也就是说,你应该使用switch语句:
switch(statusCode)
{
case "1":
// do some stuff
break;
// etc...
}
虽然理想情况下,statusCode
应该是枚举,其中每个值对应于错误,它将使您的代码更清晰。
答案 1 :(得分:3)
每个条件都需要statuscode ==
statusCode == "1" ? product1 : statusCode == "2" ? product2
...等
答案 2 :(得分: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
,因为它是三元运算符结构的一部分。
答案 3 :(得分:1)
使用switch statement或字典可能会更好:
var statusCodes = new Dictionary<string, string>{};
statusCodes.Add("1", productStatusItemAvailable1); // For each message
现在您可以使用密钥获取每条消息:
// Will return value of productStatusItemAvailable1:
var result = statusCodes["1"];