2014-09-18 5 views
-2

C#의 새로운 기능인 StackOverflow에 새로 추가되어 프로그래밍에 새로운 기능이 추가되었습니다. 여기에 내가 if 문에 null 참조 예외가 코드null 값 확인 C#

if (matchDetails.result.players[0].ab_up.Count() != null) 
{ 
    /* Do stuff */ 
} 

입니다. Console.WriteLine으로 테스트했습니다 :

Console.WriteLine(matchDetails); 
Console.WriteLine(matchDetails.result); 
Console.WriteLine(matchDetails.result.players); 
Console.WriteLine(matchDetails.result.players[0]); 
Console.WriteLine(matchDetails.result.players[0].account_id); 
Console.WriteLine(matchDetails.result.players[0].ab_up); 
Console.WriteLine(matchDetails.result.players[0].ab_up[0]); 

그리고 마지막 Console.WriteLine에서 Null 참조 예외가 있습니다.

if의 전체적인 점은 null ref 예외를 피하는 것이 었습니다. 내가 어디로 잘못 가고 있니? 필요한 경우 더 많은 코드를 제공 할 수 있습니다. 많은 관련성없는 코드를 게시하고 싶지 않았습니다. 귀하의 도움에 미리 감사드립니다.

정확한 null 값의 정확한 위치를 편집했습니다. 당신은 함수 결과 count()1에 널 (null)을 검사하고

+0

if (matchDetails.result.players [0] .ab_up [0]! = null)'또는 C# 6.0을 기다리고'matchDetails? .result? .players [0]? ab_up [ 0] ?. Count()' – Habib

+1

'matchDetails'가 null 인 경우 여기에 NullReferenceException이 발생합니다. 'matchDetails.result'가 null이거나'matchDetails.result.players'가 null이거나'matchDetails.result.players [0]'이 null이거나'matchDetails.result.players'가 null 인 경우 하나를 얻습니다. [0] .ab_up'은 null입니다. '! = null' 체크는 항상'true'입니다. 왜냐하면'Count()'가'int'를 반환하기 때문입니다. 값 유형으로 null이 될 수 없습니다. – phoog

답변

0

, 당신은 개체 체인에 널 (null)를 확인하기 위해 필요 - 데이터 유형에 따라 matchDetails.result.players[0].ab_up

, 이들의 matchDetails, result, players, players[0], ab_up은 null 일 수 있습니다. null의 경우 reference types을 확인하고 용도에 따라 모두 참조 유형입니다.

count()은 C#이 값 유형이고 null 일 수없는 (예외가 있지만 범위를 벗어난) 숫자를 반환합니다.

+0

나는 목록이 비어 있으면 .Count()가 null을 반환한다고 나는 어딘가에서 읽었다 고 생각한다. 그러나 matchDetails.result.players [0] .ab_up에서 null을 확인하면 제안 된 결과가 출력됩니다. 이제 왜 그것이 null인지를 알아야합니다. 시간 내 주셔서 감사합니다. – Jack

+0

나는 흥미가있다. 언제 null 일 수 있습니까? – Default

+0

@Jack 예상대로 0을 반환합니다. – Default