2016-11-02 10 views
0

나는이 라인이 있습니다null 참조 예외가

myobject.Ada = result.FirstOrDefault(m => m.Name == "Ada No").Value; 

때때로 "에이다 아니오"가없는 결과를 내가

개체 참조가 개체의 인스턴스로 설정되지 않았습니다 얻을 .

if(result.FirstOrDefault(m => m.Name == "Ada No").Value != null) 
{ 
    myobject.Ada = result.FirstOrDefault(m => m.Name == "Ada No").Value; 
} 

그러나이 중 하나가 작동하지 않았다 : 문이 null 참조 예외를 방지하기 위해 경우

는 난을 썼다. 이 코드에서이 예외를 피하려면 어떻게해야합니까? Ada No가 작동하지 않는다면 어떻게 작동합니까? 감사.

답변

7

FirstOrDefault은 조건을 만족하는 객체가 없으면 null을 반환합니다. 그리고 코드가 null로 설정된 참조 유형 변수의 멤버에 액세스하려고하면 예외가 throw됩니다. 따라서 객체에 접근하기 전에 객체의 값이 null인지 아닌지를 확인해야합니다. 당신이 낮은 버전을 사용하는 경우

myobject.Ada = result.FirstOrDefault(m => m.Name == "Ada No")?.Value; 

을 또는 :

당신은 C# 6.0을 사용하는 경우는 null 전파 연산자를 사용할 수있는 것은

var firstObj = result.FirstOrDefault(m => m.Name == "Ada No"); 

if(firstObj != null) 
{ 
    myobject.Ada = firstObj.Value; 
} 
+0

내가 FirstOrDefault를 생각하지 않는 코드의 일부 성능 중요한 부분 인 경우 NullReferenceException을 던지는 것입니다. 그 결과는 null 인 것 같습니다. – Poody

2

다른 솔루션은 모든 경우에 확인하는 것입니다 "Ada No"와 동일한 이름으로 구성된 구성원이 있습니다.

result도 null이 아닙니다.

하지만 널 전파 방법은 쓸 적은 것, 그래서 당신은 당신의 코드를 읽으려면 어떻게 취향에 따라 그리고

if(result != null && result.Any(m => m.Name == "Ada No")) 
{ 
    myobject.Ada = result.FirstOrDefault(m => m.Name == "Ada No").Value; 
} 
관련 문제