带有多个参数的嵌套if-else语句

本文关键字:嵌套 if-else 语句 参数 | 更新日期: 2023-09-27 18:09:11

所以,我正在做的是从SharePoint网站检索信息。但是,当我试图从网站上获取项目时。我得到这个错误:

可能的非故意参考比较;为了获得值比较,将左手边投射到类型"string">

它确实正确地获得了信息,但我想要实现的是一种颜色格式,其中当Status ="Completed"时,颜色将是蓝色,如果Status="Not Completed",则颜色将是红色。

foreach (ListItem item in listItems)
{
    if (item["ows_BM_x0020_Status"] != null)
    {
        str.AppendLine("<tr><td bgcolor='#E7E7E7'> " + item["ows_BM_x0020_Status"].ToString() + "</td>");
    }
    else if (item["ows_BM_x0020_Status"] == "Completed")
    {
        str.AppendLine("<td bgcolor='#0000FF'> </td>");
    }
    else if (item["ows_BM_x0020_Status"] == "Not Completed")
    {
        str.AppendLine("<td bgcolor='#FF0000'> </td>");
    }      
}

带有多个参数的嵌套if-else语句

您得到错误是因为item[key]在编译时是一个对象,但您将其与字符串进行比较。一个简单的修复方法是将item[key]转换为字符串。

if (item["ows_BM_x0020_Status"] != null)
{
    str.AppendLine("<tr><td bgcolor='#E7E7E7'> " + item["ows_BM_x0020_Status"].ToString() + "</td>");
}
else if (item["ows_BM_x0020_Status"].ToString() == "Completed")
{
    str.AppendLine("<td bgcolor='#0000FF'> </td>");
}
else if (item["ows_BM_x0020_Status"].ToString() == "Not Completed")
{
    str.AppendLine("<td bgcolor='#FF0000'> </td>");
}     

keyboardP的正确方法是修复错误。但如果它是这样嵌套的:

if (item["ows_BM_x0020_Status"] != null)
{
    str.AppendLine("<tr><td bgcolor='#E7E7E7'> " + item["ows_BM_x0020_Status"].ToString() + "</td>");
}
else if (item["ows_BM_x0020_Status"].ToString() == "Completed")
{
    str.AppendLine("<td bgcolor='#0000FF'> </td>"); // will never be reached
}
else if (item["ows_BM_x0020_Status"].ToString() == "Not Completed")
{
    str.AppendLine("<td bgcolor='#FF0000'> </td>"); //neither
}     

其他2个appendLines将永远无法到达,因为:

item["ows_BM_x0020_Status"].ToString() == "Completed" 

只能是真的,如果这也是真的:

item["ows_BM_x0020_Status"] != null

这也适用于原始代码。所以使用这个:

object obj = item["ows_BM_x0020_Status"];
if ( obj != null)
{
    string value = obj.ToString();
    if (value == "Completed")
    {
       str.AppendLine("<td bgcolor='#0000FF'> </td>"); 
    }
    else if (value == "Not Completed")
    {
       str.AppendLine("<td bgcolor='#FF0000'> </td>"); 
    }  
    else
    {
       str.AppendLine("<tr><td bgcolor='#E7E7E7'> " + value + "</td>");
    }
}

这假设您不想做任何事情,如果状态没有设置:

if (item["ows_BM_x0020_Status"].ToString() != null)
{}

我认为您必须将搜索的项目按索引或值强制转换为字符串。