system.nullable null * int 값의 값은 얼마입니까?
-
19-09-2019 - |
문제
다음 진술을 고려하십시오.
int? v1 = null;
int? v2 = 5 * v1;
의 가치는 무엇입니까 v2
? (null
또는 빈 문자열?)
컴파일러가 유효하지 않은 작업으로 표시되지 않도록하려면 어떻게해야합니까? 사용자 정의 예외 처리를 따라야합니까?
해결책
이것의 null
.
C# 언어 사양 3.0 (섹션 §7.2.7 : 리프팅 연산자)
이진 연산자를 위해
+
-
*
/
%
&
|
^
<<
>>
:피연산자와 결과 유형이 모두 불가능한 값 유형 인 경우 연산자가 해제되는 형태가 존재합니다. 리프트 형태는 단일을 추가하여 구성됩니다
?
각 피연산자 및 결과 유형에 대한 수정 자. 리프트 연산자는 anull
하나 또는 두 피연산자 인 경우 가치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; }