2013-03-01 2 views
5

두 번째 조건이 실행되지 않도록 if 문에서 단락 회로 (& & 또는 ||)를 사용할 수 있습니다. 두 조건 모두를 실행하려면 단일 피연산자 (& 또는 |)를 사용하십시오. 내가 인라인 if 문 아래와 같은 경우 인라인 If 문 - 단락

그래서 말 : MyObject를 내가 단락을 사용하고 안 나의 의견에있는 null의 경우

var test = (MyObject != null || string.IsNullOrEmpty(MyObject.Property)) ? string.Empty : MyObject.Property; 

object reference 오류가 발생합니다. 누군가 설명해 주시겠습니까?

+3

을 당신 ' '?'앞에 닫는 괄호가 없습니다. – Corak

+0

@Corak 예 마지막 대괄호를 놓친 ...편집 된 지금 – Zaki

답변

13

잘못된 조건을 사용하고 있습니다. 이 제품 :

MyObject != null || string.IsNullOrEmpty(MyObject.Property) 

이어야 : 왼손 거짓 인 경우의 ||

MyObject == null || string.IsNullOrEmpty(MyObject.Property) 

우변 만 실행한다. MyObject이 아니고이 아닌 경우에만 실행하려고합니다.

편집 : 너무하지만

var test = MyObject != null && !string.IsNullOrEmpty(MyObject.Property) 
     ? MyObject.Property : ""; 

참고 조건 연산자의 두 번째 및 세 번째 피연산자의 반전 : 당신이 정말로 MyObject != null 부분을 원하는 경우에, 당신이 모든 일을 변경할 수 있습니다. !

+0

아 나는 그렇게한다면 && 같은 조건 대신에 | & | 그것은 괜찮을 것입니다 – Zaki

+0

@ Sam1 : 그럼 당신은 그것의 다른 비트를 반대해야 할거야. –

+0

감사합니다. 지금은 분명합니다 : P – Zaki

3

당신은

var test = (MyObject == null || string.IsNullOrEmpty(MyObject.Property) ? string.Empty : MyObject.Property 
2

이 시도 =하지 한는 ==이 있어야합니다

여기
var test = (MyObject == null || string.IsNullOrEmpty(MyObject.Property) 
      ? string.Empty : MyObject.Property 
2
MyObject != null || string.IsNullOrEmpty(MyObject.Property) 

당신은 말한다.

내 개체가 null이 아닌 경우. 또는 string.IsNullOrEmpty (MyObject.Property)

즉, MyObject가 null이면 두 번째 부분을 실행하려고 시도합니다.

MyObject == null || string.IsNullOrEmpty(MyObject.Property) 

MyObjectnull이므로 첫 번째 조건은 그래서 두 번째 부분은 조건의 전부를 알고 평가해야 false 때문에 발생 널 (null) 예외

2

에게 던져하지 않습니다. 이에 줄을 변경 :

MyObject != null && string.IsNullOrEmpty(MyObject.Property) 
1

당신은 예를 들어 가독성 대신 라인 수, 선호한다 :

string prop = string.Empty; 
if(MyObject != null && MyObject.Property != null) 
    prop = MyObject.Property; 

(당신의 예외에 대한 이유가 이미 다른 답변에서 설명했다)

+0

라인 카운트가 항상 목표는 아닙니다. 예를 들어, Lamda/predicate 내에서'{'&'}'의 사용을 강요하고 명시 적 리턴도 읽을 수 없습니다. – JoeBrockhaus