문자열 객체에 할당 할 때 "."보다 string.Empty를 사용하는 이유


14

내 코드를 통해 StyleCop을 실행했으며 SA1122 권장 사항 중 하나는 빈 문자열을 값에 할당 할 때 ""대신 string.Empty를 사용하는 것입니다.

내 질문은 이것이 왜 모범 사례로 간주되는지입니다. 아니면 이것이 모범 사례로 간주됩니까? 두 문 사이에 컴파일러 차이가 없다고 가정하므로 가독성이라고 생각할 수 있습니까?

그래서 질문과 답변

Jon Skeet의 질문에 대한 답변


5
이것이 스택 오버플로에서 요청되고 응답되었다고 확신하지만 그것을 찾는 데 문제가 있습니다. 그것은을위한 새로운 문자열 객체의 인스턴스를 가지고 있다는 사실을 함께 할 수있어 ""하지만string.Empty
ChrisF

@ChrisF Ahh는이 유형의 질문에 대해 스택 오버플로를 생각하지 않았습니다. 내가 ander을 것입니다.
dreza

1
stackoverflow에 대한 질문의 dup : stackoverflow.com/questions/151472/…
quentin-starin

@ChrisF-SO에 요청되었습니다. 이상이상이상 ...
오디드

1
여기에 우리가 간다 - stackoverflow.com/questions/151472/... - 다시 2008 년 9 월에서
ChrisF

답변:


12

유효한 이유 중 하나는 오타 나 자리 표시자가 아니라는 것을 분명히하기 때문입니다 . 여기에서 실제로 빈 문자열을 사용해야합니다.

그것이 "모범 사례"로 간주되는지 모르겠습니다.


7

가독성과 사소한 성능 향상의 두 가지 이유가 있다고 생각합니다.

가독성은 쉽습니다.보다 쉽게 ​​발견 할 string.Empty""있습니다. 검색 string.Empty은 일반적으로 리터럴을 찾는 것보다 쉽고 쉬울 것입니다. 또한 오타를 만들거나 무언가를 끝내는 것을 잊어 버린 것이 아니라 빈 문자열을 원했습니다.

성능상의 이유는 interning 때문입니다 . 런타임은 이전에 사용한 문자열 테이블을 유지하므로 실제로 문자 별 검사를 수행하지 않고도 문자열 비교를 신속하게 수행 할 수 있습니다. string.Empty이미에 억류 참조 인 ""경우 - 같은 따라서 약간의 성능 저하의 원인이 당신에게 억류 된 버전을 제공하지 않을 수도 있습니다 문자를 입력.


7
리터럴 ""을 입력하면 적어도 .Net 2 이후로 항상 동일한 인터 닝 된 버전의 ""이 제공됩니다.
quentin-starin

맞습니다. MSDN에 관한 기사는 그 시점에서 따라하기가 약간 어렵습니다. ""와 문자열처럼 보입니다. 빈 문자열은 동일한 인터 닝 된 문자열을 가리켜 야하지만 .net 런타임 버전 간의 일부 차이점을 나타내는 것 같습니다. 코드에 여러 번 나타나는 문자열 리터럴은 두 번째에 삽입되어 더 이상 사용됩니다.
CodexArcanum 2014 년

4
또한 나는 약간의 말을 할 때 아주 작은 것을 의미한다고 강조해야합니다. "성능 때문에"는 한 표현에서 다른 표현으로 전환해야하는 이유가 아니라 런타임에 대해 알만한 가치가있는 것입니다.
CodexArcanum 2014 년

4
또한 성능 측면은 컴파일에만 해당됩니다. 둘 다 동일한 IL로 컴파일 할 때 런타임 성능은 동일해야합니다.
lzcd

그 성능 향상은 컴파일에만있을 것입니다
ratchet freak

4

string.Empty 정말 코너 케이스에서 승리하면 마법의 버그가 발생하고 디버깅하기가 어려울 수 있습니다.

가 있으면 제로 폭 공간 에서 "".


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.