반응형
"null"상수를 전달할 때 예외가 발생하지만 "null"문자열 참조를 전달할 때 예외가 발생하는 이유는 무엇입니까?
이 코드를 실행하면 :
Console.WriteLine( String.Format( "{0}", null ) );
내가 얻을 ArgumentNullException
이 코드를 실행하는 경우 만 :
String str = null;
Console.WriteLine( String.Format( "{0}", str ) );
잘 실행되고 출력은 빈 문자열입니다.
이제 두 조각은 나와 동일하게 보입니다. 둘 다 null 참조를 전달 String.Format()
하지만 동작은 다릅니다.
여기서 어떻게 다른 행동이 가능합니까?
무슨 일이 일어나고 있는지 알아 내기 위해 코드를 디 컴파일하면됩니다.
string.Format("{0}", null)
가장 구체적인 적용 가능한 오버로드를 호출합니다 string.Format(string, object[])
.
의 과부하 string.Format
는 다음 과 같습니다.
Format(String, Object)
Format(String, Object[])
Format(IFormatProvider, String, Object[])
Format(String, Object, Object)
Format(String, Object, Object, Object)
마지막 세 가지 옵션이 잘못된 이유가 분명하기를 바랍니다.
작업에 사용하는 처음 두 어떤에서, 컴파일러에서 변환을 비교 null
로 Object
에서 변환 null
에 Object[]
. 로 변환 Object[]
에서 변환이 때문에 "더 나은"것으로 간주 Object[]
에가 Object
있지만 그 반대의 경우도 마찬가지. 다음과 같은 논리가 적용되었습니다.
Foo(String)
Foo(Object)
그리고 호출 Foo(null)
, 선택 Foo(String)
합니다.
따라서 원본 코드는 다음과 같습니다.
object[] values = null;
string.Format("{0}", values);
이 시점에서, 희망 당신은 거라고 기대 을 ArgumentNullException
- 문서에 따라.
반응형
'programing tip' 카테고리의 다른 글
스프링 보안을 사용하여 프로그래밍 방식으로 사용자 로그인 (0) | 2020.12.09 |
---|---|
다른 저장소와 연결하는 github (0) | 2020.12.09 |
selectInput 선택에 반응하는 R 반짝이는 전달 (0) | 2020.12.09 |
목록 / 세부 정보보기 및 페이지 매김이있는 앱의 Redux 상태 모양을 선택하는 방법은 무엇입니까? (0) | 2020.12.09 |
C ++ 11 foreach 구문 및 사용자 지정 반복기 (0) | 2020.12.08 |