2013-04-14 31 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

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

這是假設你不想做任何事情,如果狀態未設置: