1

所以,我正在做的是从 SharePoint 网站检索信息。但是,当我尝试从该站点获取项目时。我收到此错误:

可能的意外参考比较;要进行值比较,请将左侧转换为“字符串”

它确实可以正确获取信息,但是我想要实现的是一种颜色格式,其中当 时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>");
    }      
}
4

3 回答 3

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>");
}     
于 2013-04-14T18:33:53.053 回答
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
}     

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

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

于 2013-04-15T08:53:47.137 回答
-1
if (item["ows_BM_x0020_Status"].ToString() != null)
{}

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

于 2013-04-14T18:15:25.097 回答