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
'Programing' 카테고리의 다른 글
Django 프로젝트에서`from django.conf import settings`와`import settings`의 차이점은 무엇입니까? (0) | 2020.12.05 |
---|---|
Atlassian Greenhopper / PivotalTracker의 무료 대안? (0) | 2020.12.05 |
브라우저 개발자 도구를 사용하여 브라우저가 사용하는 srcset 이미지를 볼 수 있습니까? (0) | 2020.12.05 |
Java 9 컴파일러의 --release 플래그는 무엇입니까? (0) | 2020.12.05 |
gcc가 꼬리 재귀 최적화를 수행하는지 어떻게 확인합니까? (0) | 2020.12.05 |