최근 직장 동료 string.Empty
가 문자열 변수를 설정할 때 사용하지 말고 null
스택을 오염 시키므로 사용 하라고 말했습니다 .
그는하지 말라고
string myString=string.Empty;
하지만 string mystring=null;
정말 중요합니까? 나는 문자열이 객체라는 것을 알고 있으므로 일종의 의미가 있습니다.
나는 어리석은 질문이라는 것을 알고 있지만 당신의 견해는 무엇입니까?
최근 직장 동료 string.Empty
가 문자열 변수를 설정할 때 사용하지 말고 null
스택을 오염 시키므로 사용 하라고 말했습니다 .
그는하지 말라고
string myString=string.Empty;
하지만 string mystring=null;
정말 중요합니까? 나는 문자열이 객체라는 것을 알고 있으므로 일종의 의미가 있습니다.
나는 어리석은 질문이라는 것을 알고 있지만 당신의 견해는 무엇입니까?
string.Empty
,, ""
그리고 null
모두 상수 값이지만 변수에 할당하는 이유를 알 수 없을만큼 모두 '단순'합니다. out
변수 를 캡처해야하는 경우 왜 string myString;
?
String.Empty
; 누군가 당신이 사용하는 중간 이름을 가지고 있는지 여부를 모른다면 null
). 그런 다음 올바른 의미를 가지면 명확하게 정확하고 쉽게 유지 관리 할 수있는 방식으로 코드를 작성하십시오.
답변:
null
와 Empty
매우 다른, 그리고 그들 사이를 전환 임의적으로하지 않는 것이 좋습니다. 그러나 Empty
하나의 고정 된 참조 이므로 추가 "비용" 이 없습니다 (여러 번 사용할 수 있음).
ldsfld로 인한 스택에는 "오염"이 없습니다 . 그 우려는… 로드하는 null
것은 다소 저렴하지만 값 확인에주의하지 않으면 널 참조 예외가 발생할 수 있습니다.
개인적으로는 둘 다 사용하지 않습니다 ... 빈 문자열을 원한다면 ""
간단하고 분명합니다. 수단을 인턴이 또한 어떤 당 사용 오버 헤드를 가지고있다.
IL 수준에서 ""와 Empty의 차이점은 ldstr과 ldsfld에 불과하지만 둘 다 동일한 단일 인턴 문자열 참조를 제공합니다. 또한 최신 .NET 버전에서는 JIT가 직접 차단하여 빈 문자열 참조를 생성합니다. 실제로 정적 필드 조회를 수행 하지 않고 를 . 기본적으로 가독성을 제외하고는 어느 쪽이든 신경을 쓸 이유가 없습니다. ""만 사용합니다.
""
6 배 더 긴 상용구 코드 대신 사용하면 +1 . 누가이 말도 안 돼?! @Jalal 그 Brad Abrams 게시는 심각하게 구식이며 컴파일러가 여전히 두 코드를 똑같이 최적화하지 않으면 Microsoft에 부끄럽습니다 ! 그러나 그들의 일을 고치는 것은 우리의 일이 아닙니다. 그리고 사실, 우리는 그럴 필요가 없습니다. 두 번째 링크에서 Lasse (주석에있는)는 두 변형과 비교 한 어셈블리 출력을 비교했습니다. 둘은 동일합니다.
""
전체 풀을 검색하여 이미 있는지 여부를 확인하고 string.Empty;
사용하는 경우 미리 정의 된 값을 사용하고 검색이 더 이상 존재하지 않는 방식입니다. 클래스는 또한이 메서드를 노출했습니다 : 이것을string.Intern/IsInterned
확인 하십시오
그것은 '스택을 오염시키지'않습니다. 기술적 이유는 없지만 변수를 객체에 대한 참조로 설정하는 것 (빈 문자열이더라도)과 null
. 그것들은 같은 것이 아니며 다른 방식으로 사용되어야합니다.
null
데이터가 없음을 나타 내기 위해 string.Empty
(또는 ""
) 데이터가 있음을 나타 내기 위해 사용되어야합니다 ( 실제로는 일부 빈 텍스트). 가장 적절한 것이 무엇인지 확실하지 않은 특별한 경우가 있습니까?
편집, 추가 된 예 :
string.Empty
사람 이름의 기본 접미사로 사용할 수 있습니다 (예를 들어 대부분의 사람들은 박사 학위가 없습니다).
null
구성 파일에 지정되지 않은 구성 옵션에 사용할 수 있습니다 . 이 경우 string.Empty
구성 옵션이 있지만 원하는 구성 값이 빈 문자열 인 경우 사용됩니다.
string.Empty
또는 ""
사용하십시오 null
. string.Empty
사람의 이름 (예 : 대부분의 사람은 PhD가 없음) 및 null
구성 파일에 지정되지 않은 구성 옵션에 대한 기본 접미사로 사용할 수 있습니다 . 두 번째 경우 string.Empty
에는 구성 옵션이 있지만 원하는 구성 값이 빈 문자열 인 경우 사용됩니다.
null
"접미사 없음"을 표시 하는 데 사용하지 않는 이유는 무엇입니까?
다른 사람들이 이미 대답했듯이 그들은 다릅니다.
static void Main(string[] args)
{
string s1 = null;
string s2 = string.Empty;
string s3 = "";
Console.WriteLine(s1 == s2);
Console.WriteLine(s1 == s3);
Console.WriteLine(s2 == s3);
}
results:
false - since null is different from string.empty
false - since null is different from ""
true - since "" is same as string.empty
빈 문자열과 null 문자열을 관리하는 문제는 플랫 파일로 유지하거나 통신을 통해 전송해야 할 때 문제가되고 있습니다. 따라서이 페이지를 방문하여 좋은 솔루션을 제공하는 다른 사용자에게 유용 할 수 있습니다. 그 특별한 문제.
문자열을 파일이나 통신에 저장
하려면 문자열을 바이트로 변환해야 할 것입니다.
내가 권장하는 좋은 방법은 변환 된 문자열에 2 개의 헤더 바이트 세그먼트를 추가하는 것입니다.
세그먼트 1-1 바이트에 저장되고 다음 세그먼트의 길이를 설명하는 메타 정보.
세그먼트 2-저장할 문자열의 길이를 보유합니다.
예 :
문자열 "abcd"-단순화하기 위해 ASCII 인코더를 사용하여 변환하고 {65,66,67,68}을 얻습니다.
계산 세그먼트 2는 4를 산출하므로 4 바이트는 변환 된 문자열의 길이입니다.
세그먼트 1을 계산하면 1이 생성됩니다. 변환 된 문자열 정보의 길이 정보를 보유하는 데 1 바이트 만 사용되었으므로 (즉, 260이면 2를 얻습니다)
새 바이트 스트라이프는 이제 파일에 저장할 수있는 {1,4,65,66,67,68}이됩니다.
주제와 관련된 이점은 저장할 빈 문자열이 있으면 변환에서 길이가 0 인 빈 바이트 배열을 얻고 세그먼트를 계산 한 후 결국 {1,0}이 될 수 있다는 것입니다. 저장되고 나중에로드되고 빈 문자열로 다시 해석됩니다. 반면에 문자열에 null 값이 있으면 저장할 바이트 배열로 {0} 만 갖게되며로드 될 때 다시 null로 해석 될 수 있습니다.
여러 문자열을 재그 (jag)하는 경우로드하거나 누적 할 크기를 아는 것과 같은 더 많은 이점이 있습니다.
주제로 돌아가서-그것은 .. 설명 된 동일한 원칙이 null과 빈을 구별하기 위해 모든 시스템에서 사용되는 것과 같이 스택을 오염시킬 것입니다. 그래서 yes string.Empty는 null보다 더 많은 메모리를 차지합니다. 오염이라고 .. 1 바이트 만 더.
죽음에 대한 응답을 받았지만 null은 초기화되지 않은 값이 없음을 의미합니다. string.Empty는 MSDN에 명시된대로 ""(빈 문자열)을 의미합니다.
비어 있거나 null 문자열을 확인하는 가장 안전한 방법은 string.IsNullOrEmpty를 사용하는 것입니다.
FWIW, 내가 혼합 것을 발견 ""
하고하는 것은 String.Empty
작동하지 않습니다
var a = "";
alert("a " + (a == "") + ", " + (a==String.Empty)); //Yields "a true, false"
var b = String.Empty;
alert("b " + (b == "") + ", " + (b == String.Empty)); //Yields "b false, true"
특히을 사용 $.trim
하여 빈 DOM 입력 필드의 값을 얻은 다음이를와 비교 String.Empty
하면 false
. 그 이유는 확실하지 않지만 거기에 있습니다. 이제 ""
일관성을 위해 모든 곳에서 사용 합니다.
.Length==0
하거나 사용 하는 습관을 유지해야하는 이유입니다.Compare()