문제

다음 진술을 고려하십시오.

int? v1 = null;

int? v2 = 5 * v1;

의 가치는 무엇입니까 v2? (null 또는 빈 문자열?)

컴파일러가 유효하지 않은 작업으로 표시되지 않도록하려면 어떻게해야합니까? 사용자 정의 예외 처리를 따라야합니까?

도움이 되었습니까?

해결책

이것의 null.

C# 언어 사양 3.0 (섹션 §7.2.7 : 리프팅 연산자)

이진 연산자를 위해 + - * / % & | ^ << >> :

피연산자와 결과 유형이 모두 불가능한 값 유형 인 경우 연산자가 해제되는 형태가 존재합니다. 리프트 형태는 단일을 추가하여 구성됩니다 ? 각 피연산자 및 결과 유형에 대한 수정 자. 리프트 연산자는 a null 하나 또는 두 피연산자 인 경우 가치 null (예외는 & 그리고 | 연산자 bool? §7.10.3에 설명 된대로 유형. 그렇지 않으면, 리프트 된 연산자는 피연산자를 풀고 기본 연산자를 적용하고 결과를 감싸십시오.


컴파일러가 유효하지 않은 작업으로 표시되지 않도록하려면 어떻게해야합니까? 사용자 정의 예외 처리를 따라야합니까?

유효하지 않은 작업이 아닙니다. 이 경우 예외를 처리하지 않아도됩니다.이 경우 예외를 처리 할 필요가 없습니다.

다른 팁

컴파일러가 작업을 방지하려면 두 번째 변수를 불가능하게 만드십시오. 그러면 다음을 작성해야합니다.

int v2 = 5 * v1.Value;

V1이 NULL 인 경우 런타임에 예외가 발생합니다.

그 값은 "null"이 될 것입니다.이 맥락에서 최소한 데이터베이스 NULL과 동일한 것으로 간주 될 수 있습니다. 미지의 다섯 가지가 여전히 알려지지 않았으며, 문자열이 아닌 숫자를 다루기 때문에 결코 "빈 문자열"이 될 수 없습니다.

"컴파일러가 유효하지 않은 작업으로 표시하는 것을 방지 할 수있는 방법"이 무엇을 의미하는지 잘 모르겠습니다. 이 코드는 Visual Studio 2008 =)에서 나에게 잘 작동하기 때문에.

나는 당신이 무엇을하려고하는지 잘 모르겠지만, v1이 null이면 v2가 null이되기를 원한다면 V1에 값을 사용하기 전에 값이 있는지 테스트해야합니다.

int? v2 = v1.HasValue ? 5 * v1.Value : null;

또는

int? v2 = null;
if (v1.HasValue) { v2 = 5 * v1.Value; }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top