Development Tip

문자열에 null을 합법적으로 추가하는 이유는 무엇입니까?

yourdevel 2020. 11. 28. 12:34
반응형

문자열에 null을 합법적으로 추가하는 이유는 무엇입니까?


String Basics 에 대한 MSDN 기사 는 다음을 보여줍니다.

string str = "hello";
string nullStr = null;
string emptyStr = "";

string tempStr = str + nullStr; // tempStr = "hello"
bool b = (emptyStr == nullStr);// b = false;
string newStr = emptyStr + nullStr; // creates a new empty string
int len = nullStr.Length; // throws NullReferenceException

null과 연결하면 null 참조 예외가 발생하지 않는 이유는 무엇입니까? 프로그래머의 삶을 더 쉽게 만들어서 연결하기 전에 null을 확인할 필요가 없습니까?


에서 MSDN :

문자열 연결 작업에서 C # 컴파일러는 null 문자열을 빈 문자열과 동일하게 처리하지만 원래 null 문자열의 값을 변환하지 않습니다.

+ 이항 연산자 에 대한 추가 정보 :

2 진 + 연산자는 피연산자 중 하나 또는 둘 모두가 문자열 유형일 때 문자열 연결을 수행합니다.

문자열 연결의 피연산자가 널이면 빈 문자열이 대체됩니다. 그렇지 않으면 문자열이 아닌 인수는 형식 개체에서 상속 된 가상 ToString 메서드를 호출하여 문자열 표현으로 변환됩니다.

ToString이 null을 반환하면 빈 문자열이 대체됩니다.


개념적으로 문자열은 단지 값이라는 데 동의합니다. 그러나 다음 코드를 고려하십시오.

int? i = null;
i += 1; // The result of this is that i == null

다른 값 유형 연산자가 문자열 연산자가 null을 ""로 변환하는 방식으로 default ()를 사용했다면 설명이 의미가있을 것입니다.

문자열 연산자는 편의상 단축키 (특별한 경우)라고 말하는 것이 가장 간단합니다.


개념적으로 문자열은 일반적으로 ID가있는 객체에 대한 참조가 아닌 값으로 간주됩니다. struct값 의미론이 없는 주된 이유 중 하나는 할당시 복사와 함께 제공되는 오버 헤드 때문입니다. 문자열이있는 경우 였다 값들은 널 (NULL)이 될 수없고 소위 null가 빈 문자열 인 것처럼 단지 (즉, 같은 경우 "+"연산자에 의해 처리 default(string) == ""마찬가지로 default(int) == 0).


나는 언어 (또는 표준 라이브러리) 디자이너들이 이것이 프로그래머에게 호의를 보일만큼 일반적인 경우라고 결정했다고 생각합니다.

(Neat! 나는 항상 예외를 통해 null과 연결하는 것으로 가정했습니다!)


null 참조 예외가 발생하지 않는 이유는 실제로 null 개체의 속성이나 메서드에 액세스하려고하지 않기 때문입니다. CMS 따옴표로 문자열을 연결할 때 null은 빈 문자열로 대체됩니다.

참고 URL : https://stackoverflow.com/questions/637308/why-is-adding-null-to-a-string-legal

반응형