C # nullable int를 int로 변환하는 방법
nullable int
을 로 변환하는 방법은 int
무엇입니까? 아래와 같이 2 가지 유형의 int가 있다고 가정하십시오.
int? v1;
int v2;
에 v1
값 을 지정하고 싶습니다 v2
. v2 = v1;
오류가 발생합니다. 로 변환 v1
하려면 어떻게합니까 v2
?
지금까지의 다른 답변은 모두 정확합니다. 조금 더 깔끔한 것을 하나 더 추가하고 싶었습니다.
v2 = v1 ?? default(int);
모든이 Nullable<T>
의에 암시 적으로 변환입니다 T
평가되는 전체 표현식이 치 형에 null이 할당 될 수 없다는 제공. 따라서 null 병합 연산자 ??
는 삼항 연산자의 구문 설탕 일뿐입니다.
v2 = v1 == null ? default(int) : v1;
... if / else의 구문 설탕입니다.
if(v1==null)
v2 = default(int);
else
v2 = v1;
또한 .NET 4.0 Nullable<T>
부터는 "GetValueOrDefault ()"메소드가 있습니다.이 메소드는 기본적으로 위에 표시된 널 병합을 수행하는 널 안전 게터이므로 다음과 같이 작동합니다.
v2 = v1.GetValueOrDefault();
이렇게
if(v1.HasValue)
v2=v1.Value
값 속성을 사용하여 할당 할 수 있습니다.
v2 = v1.Value;
당신이 필요한 건
v2= v1.GetValueOrDefault();
값이 있다는 것을 알고 있다면 다음 v1
과 같은 Value
속성을 사용할 수 있습니다 .
v2 = v1.Value;
이 GetValueOrDefault
메소드를 사용하면 값이있는 경우 값을 지정하고, 그렇지 않으면 유형의 기본값 또는 지정한 기본값을 지정합니다.
v2 = v1.GetValueOrDefault(); // assigns zero if v1 has no value
v2 = v1.GetValueOrDefault(-1); // assigns -1 if v1 has no value
이 HasValue
속성을 사용하여 v1
값이 있는지 확인할 수 있습니다 .
if (v1.HasValue) {
v2 = v1.Value;
}
GetValueOrDefault(T)
메소드에 대한 언어 지원도 있습니다 .
v2 = v1 ?? -1;
v1이 null 인 경우에는 수행 할 수 없지만 연산자로 확인할 수 있습니다.
v2 = v1 ?? 0;
GetValueOrDefault()
객체의 값을 검색합니다. null의 경우, 디폴트 값 int (0)를 돌려줍니다.
예:
v2= v1.GetValueOrDefault();
Int Null을 int로 변환하는 방법은 다음과 같습니다.
v2=(int)v1;
내가 염려하는 한 가장 좋은 해결책은 GetValueOrDefault()
방법을 사용 하는 것입니다.
v2 = v1.GetValueOrDefault();
그것은 가능하다 v2 = Convert.ToInt32(v1);
주어진 유형의 기본값이 허용 가능한 결과 인 경우 :
if (v1.HasValue)
v2 = v1.GetValueOrDefault();
결과가 정의되지 않은 경우 다른 기본값을 원할 경우 :
v2 = v1.GetValueOrDefault(255); // or any valid value for int in place of 255
메소드가 실패했는지 여부에 관계없이 값을 리턴하려는 경우 :
v2 = v1.GetValueOrDefault();
.NET 4.7.2 .: GetValueOrDefault()
검사없이 필드 값을 반환합니다.
넌 할 수있어
v2 = v1.HasValue ? v1.Value : v2;
보다 큰 값의 도메인을 가지기 때문에 v1
와 사이를 간단하게 변환 v2
할 수 없습니다 . 모든 것을 더할 수있는 상태입니다. 변환하려면 상태 를 매핑하는 데 사용될 값을 명시 적으로 명시해야합니다 . 가장 간단한 방법은 연산자입니다.v1
v2
v1
null
int
null
??
v2 = v1 ?? 0; // maps null of v1 to 0
이것은 긴 형식으로도 수행 할 수 있습니다
int v2;
if (v1.HasValue) {
v2 = v1.Value;
} else {
v2 = 0;
}
사용 컨텍스트에 따라 C # 7의 패턴 일치 기능을 사용할 수 있습니다.
int? v1 = 100;
if (v1 is int v2)
{
Console.WriteLine($"I'm not nullable anymore: {v2}");
}
편집하다:
어떤 사람들은 설명을 남기지 않고 하향 투표를하고 있기 때문에 이것을 실용적인 솔루션으로 포함시키는 이유를 설명하기 위해 세부 사항을 추가하고 싶습니다.
C # 7의 패턴 일치 를 통해 값 유형을 확인하고 암시 적으로 캐스트 할 수 있습니다. 위의 스 니펫에서 if-condition은에 저장된 값
v1
이에 대한 유형과 호환되는 경우에만 전달됩니다 (v2
이 경우에는)int
. 의 값v1
이null
인 경우 null을에 할당 할 수 없으므로 if 조건이 실패합니다int
. 더 적절하게null
는 아닙니다int
.이 솔루션이 항상 최적의 선택은 아니라는 점을 강조하고 싶습니다. 내가 제안했듯이, 이것이 개발자의 정확한 사용 상황에 달려 있다고 생각합니다. 할당 된 값이 null이 아닌 경우 이미
int?
값을 가지고 조건부로 값을 처리하려는 경우 (이것은 정보를 잃지 않고 nullable int를 일반 int로 변환하는 것이 안전한 유일한 시간입니다) 패턴 매칭은 아마도 가장 간결한 방법 중 하나 일 것입니다.
그것은 값 할당 할 v1
로를 v2
null가 아닌 경우 다른 사람이 0으로 기본 값을 취할 것입니다.
v2=v1??0
또는 아래에 그것을 쓰는 다른 방법이 있습니다.
v2 = v1.HasValue?v1:0
참고 URL : https://stackoverflow.com/questions/5995317/how-to-convert-c-sharp-nullable-int-to-int
'Programing' 카테고리의 다른 글
Eclipse의 Android Emulator에서 http : // localhost 웹 서버에 연결하는 방법 (0) | 2020.02.18 |
---|---|
Swift String에서 문자를 바꾸는 방법은 무엇입니까? (0) | 2020.02.18 |
안드로이드 ADB 도구를 사용하여 응용 프로그램을 시작하는 방법은 무엇입니까? (0) | 2020.02.18 |
여러 $ scope 속성보기 (0) | 2020.02.18 |
CSS를 사용하여 오른쪽에서 배경 이미지 오프셋 (0) | 2020.02.18 |