2013-04-14 4 views
1

Итак, что я делаю, так это то, что я извлекаю информацию с сайта SharePoint. Однако, когда я пытаюсь получить элемент с сайта. Я получаю эту ошибку:Вложенные операторы if-else с несколькими параметрами

Possible unintended reference comparison; to get a value comparison, cast the left hand side to type '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

Вы получаете ошибку, потому что 'пункт [ключ]' 'является объектом 'во время компиляции, но вы сравниваете его со строкой. Простое исправление должно сделать это 'if (item [" ows_BM_x0020_Status "]. ToString() ==" Completed ")'. Но вы говорите, что он все равно получает информацию, так что в чем проблема? – keyboardP

+1

@keyboardP - опубликуйте это как ответ –

+0

@ ZacharyKniebel - Кажется, проблема связана с OP. Добавлено :) – keyboardP

ответ

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
if (item["ows_BM_x0020_Status"].ToString() != null) 
{} 

Я считаю, что вы должны бросить элемент, искать по индексу или значения в строку.

+3

Если объект равен null, вызов ToString() на нем даст исключение NullReferenceException. –

0

Путь клавиатурыP правильный, чтобы исправить ошибку. Но если он вложен так:

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>"); 
    } 
} 

Это предполагает, что вы не хотите ничего делать, если статус не установлен:

Смежные вопросы