> 백엔드 개발 > C++ > C#의 조건 연산자(?:)가 때때로 암시적 유형 캐스팅에 실패하는 이유는 무엇입니까?

C#의 조건 연산자(?:)가 때때로 암시적 유형 캐스팅에 실패하는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2025-01-24 13:47:09
원래의
366명이 탐색했습니다.

C# 조건 연산자(?:)의 암시적 유형 변환 제한

C#의 조건 연산자(?:)는 간결한 조건 분기 구문을 제공합니다. 그러나 암시적 유형 변환과 관련하여 예기치 않은 동작이 나타나는 경우가 있습니다.

다음 코드 조각을 고려하세요.

<code class="language-csharp">bool aBoolValue;
byte aByteValue;

// 这段代码可以成功编译
if (aBoolValue) 
    aByteValue = 1; 
else 
    aByteValue = 0;

// 这段代码编译失败,并出现错误:“无法将类型“int”隐式转换为“byte”。
aByteValue = aBoolValue ? 1 : 0;</code>
로그인 후 복사

첫 번째 코드 조각은 컴파일되지만 두 번째 코드 조각은 실패하는 이유는 무엇입니까?

C#에서 유형 추론의 역할

컴파일러는 코드를 분석할 때 변수와 표현식이 사용되는 컨텍스트에 따라 유형을 결정합니다. 이 프로세스를 유형 추론이라고 합니다. 일반적으로 유형 유추는 내부가 아닌 표현식 외부에서 유추됩니다.

첫 번째 코드 조각에서 컴파일러는 if-else 문의 각 분기에 대한 할당을 기반으로 aByteValue 유형을 추론합니다. aByteValue에는 1 또는 0 값이 할당되며 두 값 모두 바이트입니다. 따라서 컴파일러는 aByteValue가 바이트라고 추론합니다.

조건식의 의미

조건 연산자는 결과 표현식과 대체 표현식이라는 두 가지 표현식을 평가합니다. 조건식의 유형은 두 표현식 중 보다 일반적인 유형입니다.

두 번째 코드 조각에서는 결과 표현식과 대체 표현식이 모두 정수(각각 1과 0)로 평가됩니다. 따라서 컴파일러는 조건식이 int 유형이라고 추론합니다.

호환형으로 변환

조건식은 int로 평가되므로 암시적으로 바이트로 변환할 수 없습니다. 이 문제를 해결하려면 다음 코드와 같이 명시적으로 표현식을 바이트로 변환해야 합니다.

<code class="language-csharp">aByteValue = aBoolValue ? (byte)1 : (byte)0;</code>
로그인 후 복사

Why Does C#'s Conditional Operator (?:) Sometimes Fail Implicit Type Casting?

위 내용은 C#의 조건 연산자(?:)가 때때로 암시적 유형 캐스팅에 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿