IT

null을 캐스팅하면 Convert.ToString (null)이 다른 값을 반환하는 이유는 무엇입니까?

lottoking 2020. 7. 22. 07:45
반응형

null을 캐스팅하면 Convert.ToString (null)이 다른 값을 반환하는 이유는 무엇입니까?


Convert.ToString(null)

보고

null

예상대로

그러나

Convert.ToString(null as object)

보고

""

왜 이것들이 다른가요?


여기에 두 가지 가지가 발생 ToString합니다.

Convert.ToString(object o);
Convert.ToString(string s);

C # 컴파일러는 기본적으로 입력과 함께 작동 할 가장 보강을 선택합니다. null값은 참조 형식으로 변환한다. 경우이 string보다 구체적 object이므로 승자로 선정됩니다.

에서 null as object당신은 표현의 유형을 응고했습니다 object. 이것은 string오버로드와 더 이상 호환되지 않는 컴파일러는 object유일하게 호환되는 오버로드로 오버로드를 선택합니다 .

이 타이 브레이킹 작동 방식에 대한 자세한 내용은 C # 언어 사양의 7.4.3 단원에서 다룹니다.


JaredPar의 문자 해결 답변 에 이어 "왜 Convert.ToString(string)null을 Convert.ToString(object)반환 하지만 string.Empty" "를 반환 ?

그리고 그 대답은 ... 문서그렇게 말하기 때문에 :

Convert.ToString (string)은 "지정된 노드 인스턴스입니다. 실제 변환은 수행되지 않습니다."

Convert.ToString (object)은 "값의 문자열 표현 또는 값이 null 인 경우 String.Empty"를 반환합니다.

편집 : 이것이 "사양의 버그", "매우 나쁜 API 디자인", "이것이 왜 이렇게 지정 되었습니까?"등에 근거한 근거를 찍을 것입니다. 큰 문제입니다.

  1. System.Convert모든 기본 유형을 자체 로 변환하는 메소드가 있습니다 . 이것은 변환이 필요하지 않기 때문에 이상합니다. 따라서 따르는 변수는 리턴됩니다. Convert.ToString(string)동일하게 동작합니다. 나는 이것이 코드 생성 시나리오를 위해 여기에서 가정합니다.
  2. Convert.ToString(object)통과 될 때 3 개의 선택이 null있습니다. Throw, null 또는 return string.Empty를 반환합니다. 던지는 것은 나쁠 것입니다-이중으로 인해 생성 된 코드를 사용하고 가정하에. null을 반환하면 호출자가 null 검사를 수행해야합니다. 다시 생성 생성 된 코드에서는 적합하지 않습니다. 반환. 선택은 선택입니다. 나머지는 System.Convert값 유형 다루며 논의합니다.
  3. null을 반환하는 것이 더 "정확한"지 여부는 논쟁의 여지가있을 것입니다. 변경 Convert.ToString(string)은 "실제 전환 없음"규칙 위반 함을 의미합니다. 이후 System.Convert정적 유틸리티 클래스, 각 방법은 어디에서나 그 자체로 취급 할 수있다. 이 동작이 "놀랍게"되어야하는 실제 시나리오는 거의 없기 때문에 사용성에 대한 것이 거의 없기 때문입니다.

참고 URL : https://stackoverflow.com/questions/10355736/why-does-convert-tostringnull-return-a-different-value-if-you-cast-null

반응형