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

时间:2013-04-14 18:10:54

标签: c# sharepoint if-statement

所以,我正在做的是我正在从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>");
    }      
}

3 个答案:

答案 0 :(得分:2)

您收到错误是因为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>");
}     

答案 1 :(得分:0)

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
}     

永远不会达到另外两个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>");
    }
}

如果未设置状态,则假定您不想执行任何操作:

答案 2 :(得分:-1)

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

我相信您必须通过索引或值将您搜索的项目转换为字符串。