null이 아닌 사전 검사 를 위해 new ?
연산자를 사용하여 값을 설정하는 것이 할당에 사용할 수없는 이유는 무엇 입니까?
예를 들면 :
var list = // ... Some list
var entry = list.FirstOrDefault();
entry?.Value = 123;
오류로 인해 컴파일되지 않습니다.
할당의 왼쪽은 변수, 속성 또는 인덱서 여야합니다.
그러나 메서드 또는 다른 것을 호출하면 작동합니다.
이 컴파일러 동작의 이유는 무엇입니까?
C # 컴파일러는 ?
s 체인이로 평가 null
되면 모든 추가 처리가 중지됨 을 선언하여이 문이 제대로 작동하도록 만들 수 있습니다.
그러나 문제는 오른쪽에 부작용이있을 때해야 할 일입니다.
entry?.Value = CallSomeFunctionWithSideEffects(123);
이것의 의미는 오른쪽이 항상 평가 될 때 다른 할당과 크게 다릅니다. 그러나 여기서 오른쪽 평가는 왼쪽이 비값을 생성하는 것으로 알려질 때까지 연기되어야 null
합니다.
호출 대상이 매개 변수보다 먼저 처리되기 때문에 함수 호출에는 동일한 문제가 발생하지 않습니다.
entry?.SetValue(CallSomeFunctionWithSideEffects(123));
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다