Programing

String.Format 인수 Null 예외

crosscheck 2020. 12. 5. 09:18
반응형

String.Format 인수 Null 예외


아래 코드는 Argument Null Exception을 발생시킵니다.

var test = string.Format("{0}", null); 

그러나 이것은 빈 문자열을 반환합니다.

string something  = null; 
var test = string.Format("{0}", something); 

두 번째 코드에서 예외가 발생하지 않는 이유를 알고 싶습니다. 이것은 버그입니까?


차이점은 첫 번째 코드는 string.Format(string, object[])...를 호출 하고 두 번째 코드는를 호출한다는 것 string.Format(string, object)입니다.

null두 번째 메서드에 대한 유효한 인수 (첫 번째 자리 표시 자의 값일 것으로 예상 됨)이지만 첫 번째 메서드는 아닙니다 ( null대개 자리 표시 자의 배열 이됩니다). 특히, 언제 NullArgumentException던져 졌는지에 대한 문서를 비교하십시오 .

string.Format(string, object):
형식null

그러나:

string.Format(string, object[]):
형식 또는 인수null

다음 과 같이 string.Format(string, object)구현되는 것으로 생각하십시오 .

public static string Format(string format, Object arg0)
{
    return string.Format(format, new object[] { arg0 } );
}

따라서 약간의 교체 후 코드는 다음과 비슷합니다.

// Broken code
object[] args = null; // No array at all
var test = string.Format("{0}", args); 

// Working code
object[] args = new object[] { null }; // Array with 1 value
var test = string.Format("{0}", args); 

두 번째 코드 조각은 다음 오버로드를 호출합니다.

Format(String, Object)

여기서 값은 문서에 따라 null 일 수 있습니다.

첫 번째 코드 조각은 다음 오버로드를 사용합니다.

Format(String, Object[])  

문서에 따라 두 번째 값 null이 될 수 없습니다 .


기존 답변에서 언급되지 않은 사소한 요점은 거의 문제를 제기합니다.

에 대한 전체 메시지는 다음 ArgumentNullException과 같습니다.

값은 null 일 수 없습니다.
매개 변수 이름 : args

또한 여기서 문제의 일부는 null모든 유형입니다. string또는 object(또는 C # default()기능을 사용하여) 명시 적으로 캐스팅 하면 문제를 피할 수 있습니다.

참고 URL : https://stackoverflow.com/questions/24516237/string-format-argument-null-exception

반응형