programing tip

"null"상수를 전달할 때 예외가 발생하지만 "null"문자열 참조를 전달할 때 예외가 발생하는 이유는 무엇입니까?

itbloger 2020. 12. 9. 07:54
반응형

"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)

마지막 세 가지 옵션이 잘못된 이유가 분명하기를 바랍니다.

작업에 사용하는 처음 두 어떤에서, 컴파일러에서 변환을 비교 nullObject에서 변환 nullObject[]. 로 변환 Object[]에서 변환이 때문에 "더 나은"것으로 간주 Object[]에가 Object있지만 그 반대의 경우도 마찬가지. 다음과 같은 논리가 적용되었습니다.

Foo(String)
Foo(Object)

그리고 호출 Foo(null), 선택 Foo(String)합니다.

따라서 원본 코드는 다음과 같습니다.

object[] values = null;
string.Format("{0}", values);

이 시점에서, 희망 당신은 거라고 기대ArgumentNullException- 문서에 따라.

참고 URL : https://stackoverflow.com/questions/13877501/why-do-i-get-an-exception-when-passing-null-constant-but-not-when-passing-an

반응형