2013-04-14 1 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>"); 
    } 
} 

을이 상태가 설정되지 않은 경우, 아무것도하지 않으려는 가정

관련 문제