所以,我正在做的是我正在从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>");
}
}
答案 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)
{}
我相信您必须通过索引或值将您搜索的项目转换为字符串。