C# 조건부 연산자 및 암시적 바이트 캐스팅: 유형 안전 문제
암시적 바이트 캐스팅과 함께 조건부 연산자(? :
)를 사용하면 C#에서 컴파일 오류가 발생할 수 있습니다. 예를 들어 aByteValue = aBoolValue ? 1 : 0;
은 간단해 보이지만 유형 비호환으로 인해 실패합니다.
C#의 강력한 타이핑 시스템에는 할당 시 호환 가능한 유형이 필요합니다. 조건 연산자의 유형은 true 및 false 표현식에 따라 결정됩니다. 예제에서 1
및 0
은 정수이므로 전체 표현식이 정수가 됩니다. 이 정수를 byte
변수(aByteValue
)에 할당하는 것은 byte
가 int
보다 범위가 작기 때문에 문제가 됩니다. 컴파일러는 유형 안전성을 유지하기 위해 이러한 암시적 변환을 방지합니다.
해법에는 명시적 캐스팅이 포함됩니다: aByteValue = aBoolValue ? (byte)1 : (byte)0;
. 이는 정수 리터럴을 바이트로 명시적으로 변환하여 유형 불일치를 해결합니다.
이 동작은 할당 대상과 관계없이 식 유형을 결정하는 데 우선순위를 두는 C#의 유형 유추 메커니즘에서 비롯됩니다. 이는 다양한 유형의 여러 할당 대상에서도 유형 안전성을 보장합니다.
이 규칙의 유일한 예외는 주변 코드와의 호환성을 위해 컨텍스트 기반 유형 추론이 사용되는 람다 표현식입니다.
위 내용은 C#이 암시 적 바이트 캐스팅으로 조건부 연산자를 사용할 때 오류를 던지는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!