使用条件运算符时出错

时间:2013-12-18 10:14:26

标签: c# conditional-operator

我的代码是这样的:

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。

我做错了什么?或者是否无法使用字符串?

4 个答案:

答案 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"];