2014-05-10 3 views
-4

IndexOutOfRangeException 제가 약간의 프로젝트에서 방아쇠를 당겼지만 그 이유는 무엇입니까?if 조건으로 인해 IndexOutOfRangeException이 발생했습니다.

다음은 부울 조건입니다 :

(messages != null && messages.Rows[0] != null) 

내가 뭘하려고했던 것은이 두 객체가 초기화되었는지 확인하는 것입니다,하지만 당신은 이미 생각으로이 갑자기 일어났다.

+3

글쎄 아마도 행이 없습니다 ... –

+0

읽을 수정! = null && messages.Rows.Count> 0)'또는'(messages! = null && messages.Rows.Count> 0 && messages.Rows [0]! = null)' –

답변

2

Rows도 비어 있는지 확인해야하는 것처럼 들립니다. 우리는 실제로 Rows의 유형을 알고하지 않습니다,하지만 당신은 할 수 있습니다 :

if (messages != null && messages.Rows.Count > 0 && messages.Rows[0] != null) 

아니면이있는 경우 첫 번째 행을 얻기 위해 LINQ를 사용할 수 있습니다, 그리고이 null인지 확인하십시오

if (messages != null && messages.Rows.FirstOrDefault() != null) 

(즉 Rows 일부 T에 대한 IEnumerable<T>를 구현하는 가정입니다.)

그것은 Rows[0] 것이다 결코하는 널 (null), 그리고 Y 있다는 가능성도있어 OU 정말 카운트가 0보다 큰지 여부를 확인해야합니다

if (messages != null && messages.Rows.Count > 0) 

또는`(메시지 :

if (messages != null && messages.Rows.Any()) 
+0

감사합니다. -하지만 행이 비어 있는지 확인해야하는 이유는 무엇입니까? 엄밀히 말하면, 기술적으로는 그렇지 않다는 것입니다. – user2182300

관련 문제