带有多个参数的嵌套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>");
}
}
您得到错误是因为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)
{}
我认为您必须将搜索的项目按索引或值强制转换为字符串。