643

C #에서는 문자열 값을 빈 문자열로 초기화하려고합니다.

어떻게해야합니까? 올바른 방법은 무엇이며, 그 이유는 무엇입니까?

string willi = string.Empty;

또는

string willi = String.Empty;

또는

string willi = "";

또는 무엇을?


  • java와 비슷한 토론을 참고하십시오 :stackoverflow.com/questions/213985/… - harpo
  • 그래도 String.IsNullOrEmpty (string myString)을 사용하는 것이 좋습니다. - ZombieSheep
  • [string.IsNullOrWhiteSpace (stringvalue)]를 사용합니다. .Net 4.0에서 작동합니다. 초기화하려면 간단히 다음을 사용하십시오. [var text = " " ;;] 단순하고 읽기 쉽고 입력하는 데 가장 시간이 필요합니다. :) - Jalal El-Shaer
  • 변수의 재미있는 이름은 무엇보다 중요합니다. - Arj
  • 관심이있는 것은 왜 Empty 속성이 있는지입니다. 그것은 좋고 모든 것이지만 필수적이고 완전한 것이 아닙니다. - MasterMastic

29 답변


739

귀하와 귀하의 팀이 가장 잘 읽을 수있는 것을 사용하십시오.

다른 대답은 당신이 사용할 때마다 새로운 문자열이 생성 될 것을 제안했습니다."". 이것은 사실이 아닙니다. 문자열 인턴하기 때문에 어셈블리 당 한 번 또는 AppDomain 당 한 번 (또는 전체 프로세스에 대해 한 번 - 해당 정면에 확실하지 않음) 만들어집니다. 이 차이는 무시해도됩니다 -거대한의미 없는.

그러나 어느 것이 더 읽기 쉽다고 생각하는지는 다른 문제입니다. 그것은 주관적이고 사람마다 다를 것입니다 - 그래서 당신이 당신 팀의 대부분의 사람들이 무엇을 찾았는지 알아 내고, 모든 것이 일관성을 위해 함께 할 것을 제안합니다. 개인적으로 나는 찾는다.""읽기 쉽습니다.

그 주장은""" "서로 쉽게 착각해서 나를 정말로 씻지 않는다. 비례 글꼴을 사용하지 않는 한 (그리고 나는어떤개발자라면 차이를 쉽게 알 수 있습니다.


  • " "을 (를) 보려고 할 때 눈이 당신을 속일 수 있습니다. 당신은 쉽게 실수 할 수 있습니다 " " " " 이것이 다른 누군가가 작성한 것을 편집하는 것이 더 쉬운 이유입니다. 당신의 두뇌는 텍스트에 대한 선입견을 가지고 있지 않으므로 비 해석을 골라내는 것이 더 쉽습니다. - tvanfosson
  • @ tvanfosson : 그래서 당신 (또는 동료)이 사실 버그에 물린 적이 있습니까? 실제로 문제를 일으키지 않은 채 이런 종류의 주장을 의심합니다. " "을 (를) 사용하고 있습니다. 몇 년 동안 잘못 먹지 않고 ... - Jon Skeet
  • 개인적으로는 항상 String.Empty를 사용했지만 자본 &S ' 문자열에 정적 메서드를 사용하려고 할 때마다 변수와 형식을 구별 할 수있는 개인적인 선호도가 있습니다. 하지만 이것은 java의 commons.lang에서 StringUtils.EMPTY를 사용하여 이월 한 것입니다. 관심의 대상은 거의 눈이 멀어서 분명히 저에게 가독성에 도움이됩니다. - Brett Ryan
  • 당신은 타임즈 뉴 로마에서 개발을 시작할 영감을주었습니다. - Justin Rusbatch
  • 일부모호한 이유string.Empty상수가 아닙니다.. 이것은 컴파일 타임 상수가 필요한 많은 경우에,string.Empty합법적 인 것은 아닙니다. 이것은 포함한다case ""블록switch명령문,선택적 매개 변수, 적용시 매개 변수 및 특성속성들, 그리고 많은 다른 상황들 (독자들에게 남음)이있다. 그렇게 주어진string.Empty몇 가지 일반적인 상황에서는 허용되지 않습니다.""- 전 대회. - Jeppe Stig Nielsen

361

퍼포먼스와 코드 생성의 관점에서는 실제로 차이점이 없습니다. 성능 테스트에서, 그들은 앞뒤로 갔고 어느 쪽이 더 빠르다가 다른 쪽과 밀리 세컨드 만 갔다.

장면 코드 뒤에서 보면 실제로 차이점이 보이지 않습니다. 유일한 차이점은 IL에 있습니다.string.Emptyopcode를 사용한다.ldsfld""opcode를 사용한다.ldstr,하지만 그 이유는string.Empty정적이며 두 가지 지침 모두 동일한 작업을 수행합니다. 생산되는 조립품을 보면, 정확히 동일합니다.

C #코드

private void Test1()
{
    string test1 = string.Empty;    
    string test11 = test1;
}

private void Test2()
{
    string test2 = "";    
    string test22 = test2;
}

일리노이 코드

.method private hidebysig instance void 
          Test1() cil managed
{
  // Code size       10 (0xa)
  .maxstack  1
  .locals init ([0] string test1,
                [1] string test11)
  IL_0000:  nop
  IL_0001:  ldsfld     string [mscorlib]System.String::Empty
  IL_0006:  stloc.0
  IL_0007:  ldloc.0
  IL_0008:  stloc.1
  IL_0009:  ret
} // end of method Form1::Test1
.method private hidebysig instance void 
        Test2() cil managed
{
  // Code size       10 (0xa)
  .maxstack  1
  .locals init ([0] string test2,
                [1] string test22)
  IL_0000:  nop
  IL_0001:  ldstr      ""
  IL_0006:  stloc.0
  IL_0007:  ldloc.0
  IL_0008:  stloc.1
  IL_0009:  ret
} // end of method Form1::Test2

어셈블리 코드

        string test1 = string.Empty;
0000003a  mov         eax,dword ptr ds:[022A102Ch] 
0000003f  mov         dword ptr [ebp-40h],eax 

        string test11 = test1;
00000042  mov         eax,dword ptr [ebp-40h] 
00000045  mov         dword ptr [ebp-44h],eax 
        string test2 = "";
0000003a  mov         eax,dword ptr ds:[022A202Ch] 
00000040  mov         dword ptr [ebp-40h],eax 

        string test22 = test2;
00000043  mov         eax,dword ptr [ebp-40h] 
00000046  mov         dword ptr [ebp-44h],eax 


  • @PrateekSaluja : IL을 보려면 Visual Studio와 함께 제공되는 ildasm.exe를 사용할 수 있습니다. 디 어셈블리를 보려면 ' 디스 어셈블리 ' 디버그 메뉴에서 중단 점을 누르면 (릴리스 코드에서도 작동합니다.) - Thomas Bratt
  • 나는이 제품을 권하고 싶습니다.하지만 .. 반사경을 사용하면 소스를 분해 할 때 언어를 선택할 수 있으며 일리노이가 옵션입니다! ILDASM은 단지 기분이 날짜입니다 ... MS 도구 팀은 좋은 도구를 닦거나 발표하지 않는 것 같습니다! - felickz

71

최고의 코드는 전혀 코드가 아닙니다.:

코딩의 근본적인 본질은 프로그래머로서의 우리의 임무는 우리가하는 모든 결정이 절충이라는 것을 인식하는 것입니다. [...]간결함으로 시작하십시오. 테스트에 필요한 다른 치수를 늘리십시오.

따라서 더 적은 코드가 더 나은 코드입니다 : Prefer""string.Empty또는String.Empty. 그 둘은6 배 이상추가적인 이점이 없으며 정확한 정보를 표현하기 때문에 확실한 명확성은 없습니다.


  • 하지만 C #에서는 문자열 만 말할 수 있습니다 .IsNullOrWhitespace (s) : p - felickz
  • 나는 코드가 가능한 한 작아야한다는 것에 동의하지만 일반적으로 적은 수의 문자가 항상 더 나은 코드라고 주장하지는 않는다. 예를 들어 변수 이름 지정과 관련하여 합당한 양의 문자는 일반적으로 i와 j를 사용하는 것보다 더 나은 이름을 갖습니다. - Markus Meyer
  • @Markus 매우 의존적 : 인덱스를 나타내는 루프 변수의 경우,i ~이다.긴 변수 이름보다 낫다. 좀 더 일반적이고 더 짧은 변수 이름동일한 정보를 전달하는, 같은 선명도, 항상 바람직합니다. 필요한 정보를 표현하는 것입니다.필요한 것특정 문자 길이, 나는 이것을 부정하지 않습니다 (아무도 없습니다). - Konrad Rudolph
  • @ Konrad : 나는 루프가 작고 다른 인덱스를 포함하지 않는 경우에만 좋은 변수 이름입니다. 그러나 나는 만약에 sth. 문자열에서와 같이 선호할만한 동일한 정보를 더 간단히 전달할 수 있습니다. 비어 있음 / " " 케이스. string.Empty는 명확성을 추가하지 않습니다. - Markus Meyer
  • 나에게 : string.Empty는이 문자열이 항상 Empty이고 Empty 여야한다고 말하면서 " " 글을 쓰는 시점에서이 문자열은 비어있을 수 있지만 자유롭게 변경할 수 있다고 말합니다. - aeroson

47

한 가지 차이점은switch-case구문, 쓸 수 없다.case string.Empty:왜냐하면 그것은 상수가 아니기 때문입니다. 당신은Compilation error : A constant value is expected

자세한 정보는이 링크를보십시오.문자열 빈 대 빈 따옴표


  • 그만큼switch성명은 아주 좋은 본보기 중 하나입니다. 또한 선택적 매개 변수를 만들면void MyMethod(string optional = "") { ... }, 또한 사용할 수 없습니다.string.Empty. 물론 당신이 정의하고 싶다면const필드 또는 로컬 변수,const string myString = "";다시""유일한 옵션입니다. 을 텐데string.Empty끊임없이 변화하는 분야가 아니 었습니다. 하지만 그렇지 않은 경우가 있으므로 어떤 경우에는 사용해야합니다."". 그래서 왜 사용하지""항상? - Jeppe Stig Nielsen
  • 이것은 매우 강력한 논쟁입니다.string.Empty너를 얻지 못하게 해.일관성코드베이스에서 : 동일한 것을 표현하기 위해서는 두 개의 엔티티를 사용해야합니다. 할 수없는 일 목록에 추가하면 사용할 수 없습니다.string.Empty속성들. - Pragmateek
  • 아주 좋은 점! 링크가 끊어졌습니다. 다음은 콘텐츠 사본입니다.web.archive.org/web/20131230161806/http://kossovsky.net/… - ygoe

41

내가 좋아할거야.stringString. 고르는string.Empty위에""하나를 선택하고 그것을 고집하는 문제입니다. 사용의 이점string.Empty그것은 당신이 의미하는 것이 아주 분명하고, 당신은 실수로 인쇄 할 수없는 문자를 복사하지 않습니다."\x003"너의"".


  • 실수로 인쇄 할 수없는 문자를 코드에 복사하면이 질문보다 더 큰 문제가 있음을 알 수 있습니다.) - Jon Skeet
  • ASCII \ 003은 내가 함께 작업 한 B2B 메시지의 필드 구분 기호입니다. :) - Jimmy
  • (\ x 이스케이프를 피하기를 권합니다. "\ x9Bad 컴파일러"와 "\ x9 좋은 컴파일러"의 차이점을 찾기가 너무 어렵습니다.본래다른 결과!) - Jon Skeet
  • 개인적으로 String에 대해 정적 메서드를 호출 할 때마다 String보다 String을 선호합니다. 그러나 거의 눈이 멀었습니다. 개인적인 취향대로 모든 사람에게 적용하지 않습니다. - Brett Ryan
  • @ 지미 확실히,하지만 우리는 빈 문자열에 대해 이야기하고있었습니다. 그 주장은""빈 문자열을 복사 / 붙여 넣기하지 않기 때문에 복사 / 붙여 넣기가 무효화 될 때 위험합니다. 다른 문자열의 경우 항상주의해야 할 점이 있습니다. - Timo

19

나는 차임을하지 않을 것이지만, 잘못된 정보가 여기에 버려지고있는 것을보고 있습니다.

나는 개인적으로 선호한다.string.Empty. 그것은 개인적인 취향이며, 나는 어떤 팀과 함께 작업 하던지의 의지에 따라 사안별로 구부린다.

다른 사람들이 언급했듯이,string.EmptyString.Empty.

또한 이것은 거의 알려진 사실이며, ""를 사용하는 것이 완벽하게 허용됩니다. ""의 모든 인스턴스는 다른 환경에서 객체를 만듭니다. 그러나 .NET 인턴은 문자열을 인 텐트하므로 미래 인스턴스는 인턴 풀에서 동일한 불변 문자열을 가져 오며 모든 성능 적중률은 무시할 수 있습니다. 출처:브래드 에이 브람스.


  • '기술적으로'            " "의 모든 인스턴스 개체를 만듭니다. 문자열이 인턴 될 가능성은 그만큼 커지는 것이 아니라 C #사양에 있습니다. - Jon Skeet

14

나는 개인적으로 더 복잡한 것을 좋은 이유가없는 한 개인적으로 ""선호한다.


12

String.Emptystring.Empty동등하다.StringBCL 클래스 이름입니다.stringC #별칭 (또는 경우에 따라 바로 가기)입니다. ~와 같은Int32int. 만나다문서더 많은 예제.

""걱정된다. 나는 정말로 모른다.

개인적으로, 나는 항상string.Empty.


10

밖에있는 모든 개발자는 ""무엇을 의미하는지 알 것입니다. 나는 개인적으로 String.Empty 처음으로 발생하고 그들이 진짜로 알아낼 시간을 구글 검색 시간을 보내고했다아르똑같은 것.


  • 공개 읽기 전용 문자열 필드이며 그 값은 " " ... 왜 변경 될까요? - Matthew Whited
  • 당신은 @ 제이슨이하는 요점을 놓쳤다. 처음 볼 때 무엇인지 어떻게 알 수 있습니까?string.Empty? 너 알았어.""네가 처음 본거야? - David R Tribble

8

이 주제는 꽤 오래되고 길기 때문에이 행동이 다른 곳에서 언급 되었다면 저를 용서해주십시오. (그리고이 문제를 다루는 답을 가르쳐주세요)

내가 사용하는 경우 컴파일러의 동작에 차이점을 발견했습니다.string.Empty또는 큰 따옴표. string.Empty 또는 큰 따옴표로 초기화 된 문자열 변수를 사용하지 않으면 차이점이 나타납니다.

초기화의 경우string.Empty컴파일러 경고

CS0219 - The variable 'x' is assigned but its value is never used

큰 따옴표로 초기화하는 경우에는 예상 된 메시지를 얻습니다.

이 동작은이 링크의 연결 문서에서 설명합니다.https://connect.microsoft.com/VisualStudio/feedback/details/799810/c-warning-cs0219-not-reported-when-assign-non-constant-value

기본적으로, 필자가 맞다면, 프로그래머가 경고 메시지로 그를 귀찮게하지 않고 디버깅 목적을 위해 함수의 반환 값으로 변수를 설정할 수있게하고, 따라서 비용이 많이 드는 할당 및 문자열의 경우에만 경고를 제한합니다. 빈은 상수가 아니라 필드입니다.


  • 나는 당신이 언급 할 첫 번째 사람이라고 생각합니다. 몇 달 전에이 Q & A를 읽었으며이 차이점을 기억하지 못합니다. - Palec
  • 흥미 롭 군. 선언문var unused = "literal";컴파일러에 의해 완전히 최적화 (제거) 될 수 있습니다. 부작용이 없어야합니다. 한편,var unused = MyClass.Member;완전히 제거 할 수는 없습니다. 그것은 읽기 때문입니다.Member부작용이있을 수 있습니다. 만약Member정적 속성입니다.get접근자인 경우 getter에 대한 호출을 유지해야합니다. 그러나Member정적 필드이므로 정적 생성자가 실행할 수있는 부작용이있을 수 있습니다. 물론 될 것입니다.잘못된 코딩 스타일그렇게하는 것. 하지만 읽을 때 더미가 필요해.Member. - Jeppe Stig Nielsen

7

콘솔 응용 프로그램에서 다음과 같은 기능을 사용하여이 간단한 테스트를 수행했습니다.

private static void CompareStringConstants()
{
    string str1 = "";
    string str2 = string.Empty;
    string str3 = String.Empty;
    Console.WriteLine(object.ReferenceEquals(str1, str2)); //prints True
    Console.WriteLine(object.ReferenceEquals(str2, str3)); //prints True
}

이것은 분명히 세 가지 변수 즉str1,str2str3다른 구문을 사용하여 초기화되었지만 메모리에서 정확히 동일한 문자열 (길이가 0 인 문자열)을 가리키고 있습니다. NET 4.5 콘솔 응용 프로그램에서이 테스트를 수행했습니다. 따라서 내부적으로는 아무런 차이가 없으며, 프로그래머로 사용하기를 원하는 모든 것이 편리합니다. 이 문자열 클래스의 동작은 다음과 같이 알려져 있습니다.인턴 문자열in .Net. 에릭 리 퍼트 (Eric Lippert)는 아주 좋은 블로그를 가지고 있습니다.이리이 개념을 설명합니다.


6

위의 모든 것.

교황청에는 더 많은 것들이 많이 있습니다. 어떤 나무 껍질이 나무에 가장 잘 어울리는 지, 나는 잔털이 짙은 갈색으로 생각합니다.


5

나는 String.Empty를 강력히 선호합니다. 다른 이유는 무엇인지 알고 당신이 실수로 내용을 삭제하지 않았다는 것을 확실히하기 위해서입니다. 주로 국제화를 위해 따옴표로 된 문자열을 보면 새로운 코드인지 항상 궁금해하며 문자열 테이블에 넣어야합니다. 그래서 코드가 변경 / 검토 될 때마다 "따옴표로 된"것을 찾아야합니다. 그렇다면 빈 문자열을 필터링 할 수 있습니다. 그러나 사람들에게 그것이 지역화되지 않을 것이라는 것을 알지 않는 한 문자열을 따옴표에 넣지 않는 것이 좋습니다. .


5

아무도 VisualStudio String에서 색깔이 다른 것과 문자열이 다름을 언급했습니다. 가독성을 위해 중요합니다. 또한 소문자는 보통 vars 및 형식에 사용되지만 큰 문제는 아니지만 String.Empty는 상수이며 var 또는 형식이 아닙니다.


4

나는 차이를 만들지 않는다. 마지막 하나는 입력하는 것이 가장 빠릅니다 :)


4

string동의어이다.System.String유형, 그들은 동일합니다.

값도 동일합니다.string.Empty == String.Empty == ""

나는 코드에서 문자 상수 ""를 사용하지 않을 것이다.string.Empty또는String.Empty- 프로그래머가 무엇을 의미하는지 쉽게 알 수 있습니다.

중에서stringString나는 소문자를 좋아한다.string더 많은 이유는 필자가 오랜 세월 동안 델파이를 사용 해왔고 Delphi 스타일은 소문자 였기 때문입니다.string.

그래서, 내가 네 상사라면, 너는 쓸거야.string.Empty


3

그것은 중요하지 않습니다 - 그들은 똑같은 것입니다. 그러나, 중요한 것은 당신이일관성이 있어야한다.

추신. 저는 항상 이런 종류의 "옳은 일"과 투쟁합니다.


  • 현대 세계에서, "일관된" StackOverflow의 목표 중 하나 인 전 세계 모든 팀에서 일관성이 있음을 의미합니다. 제안 할 수 있다면 String.Empty를 사용하십시오. - Pavel Radzivilovsky
  • 일부 언어는 빈 상수가 없으며 내가 생각할 수있는 모든 언어는 " " 길이가 0 인 문자열 그래서 " "에 투표합니다. 다른 언어와의 일관성 :) - TomXP411

2

나는 세 번째를 사용하지만 다른 두 개는 첫 번째가 덜 이상하게 보입니다. string은 String의 별칭입니다.하지만 할당을 통해 문자열이 표시되는 것을 느낍니다.


2

처음 두 가지 중 하나가 나에게 받아 들여질 것입니다. 따옴표 사이에 공백을 넣음으로써 버그를 도입하는 것이 비교적 쉽기 때문에 나는 마지막 것을 피할 것입니다. 이 특정 버그는 관찰로 찾기가 어려울 것입니다. 오타가 없다고 가정하면 모두 의미 론적으로 동일합니다.

[편집하다]

또한 언제든지 다음 중 하나를 사용하는 것이 좋습니다.string또는String일관성을 위해,하지만 그것은 나뿐입니다.


  • 나는이 말에 동의하지만, 나는 게으르다가 위험에 처해 살고있다. 어쨌든 변수 선언 밖에서 문자열을 할당하기 전에 문자열을 사용하는 코드를 작성해야한다고 생각하지 않습니다. 사실, 위험에도 불구하고 내 문자열을 초기화해야한다는 사실이 나에게 짜증을냅니다. - EnocNRoll - Ananda Gopal

2

이는 코드 스타일 환경 설정이며, .NET에서 문자열을 처리하는 방식입니다. 그러나, 여기에 내 의견이 있습니다 :)

정적 메서드, 속성 및 필드에 액세스 할 때 항상 BCL Type 이름을 사용합니다.String.Empty또는Int32.TryParse(...)또는Double.Epsilon

새 인스턴스를 선언 할 때 항상 C #키워드를 사용합니다.int i = 0;또는string foo = "bar";

필자는 선언되지 않은 문자열 리터럴을 거의 사용하지 않고 코드를 스캔하여 재사용 가능한 명명 된 상수로 결합 할 수 있습니다. 컴파일러는 상수를 리터럴로 대체합니다. 따라서 이것은 마술 문자열 / 숫자를 피하고 조금 더 의미를 부여 할 수있는 방법입니다. 또한 값을 변경하는 것이 더 쉽습니다.


2

저는 개인적으로 (사소한) 문제를 두 번이나 목격했습니다. 한 번은 팀 기반 프로그래밍에 익숙하지 않은 중학교 개발자의 실수로 인한 것이었고 다른 하나는 간단한 오타 였지만 실제로는 string.Empty를 사용하면 두 가지 문제를 모두 피할 수있었습니다.

예, 이것은 매우 중요한 판단입니다 만, 언어가 여러 가지 방법으로 작업을 수행 할 때 컴파일러의 감독과 컴파일 타임이 가장 엄격한 언어를 사용하는 경향이 있습니다. 그건아니"". 구체적인 의도를 표현하는 것이 전부입니다.

string.empty 또는 Strng.Empty를 입력하면 컴파일러에서 잘못했음을 알립니다. 바로. 단순히 컴파일되지 않습니다. 당신이 인용하고있는 개발자로서특유한컴파일러 (또는 다른 개발자)가 어떤 식 으로든 오해 할 수 없으며, 잘못했을 때 버그를 만들 수 없다는 것을 의미합니다.

""또는 그 반대의 경우 ""라고 입력하면 컴파일러는 기꺼이 말한대로합니다. 다른 개발자가 특정 의도를 수집 할 수도 그렇지 않을 수도 있습니다. 버그가 생성되었습니다.

String.Empty는 EMPTY_STRING 상수를 정의한 표준 라이브러리를 사용하기 훨씬 전에 사용되었습니다. string.Empty가 허용되지 않는 경우에도 여전히이 상수를 사용합니다.

가능할 때마다 컴파일러를 사용하여 작업하고 사용자의 실수를 피할 수 있습니다. IMO, 이것은 다른 사람들이 인용 한 것처럼 "가독성"에 우선합니다.

특이성 및 컴파일 시간 적용. 그것은 저녁 식사를위한 것입니다.


2

나는 좋겠다.string.Empty위에String.Empty포함 할 필요가 없기 때문에 사용할 수 있습니다.using System;귀하의 파일에.

피킹에 관해서는""위에string.Empty개인적인 취향이므로 팀원이 결정해야합니다.


  • 팀의 유일한 회원입니다. 어떻게 결정합니까? 주사위 던지기? - Gqqnbig
  • 어떻게 사용 가능한지 궁금해하는 사람들을 위해string.Empty가져 오지 않고 상수using Systemnamespace - C #의 키워드는 출력 * .dll 또는 * .exe 파일에 MSIL로 작성되기 전에 네임 스페이스를 포함하는 정규화 된 이름으로 변환됩니다. 그렇게 효과적으로string.Empty다음과 같이 작성됩니다.System.String.EmptyMSIL에서 컴파일러에 의해. 그리고 이미 정규화 된 형식 이름을 언급하면 코드 파일의 맨 위에 네임 스페이스를 가져 오는 작업을 건너 뛸 수 있음을 알고있을 것입니다. - RBT

1

컴파일러는 장기적으로 컴파일러를 모두 동일하게 만들어야합니다. 코드를 쉽게 읽을 수 있도록 표준을 선택하고 그대로 사용하십시오.


1

나는 단지 약간의 코드를보고 있었고이 질문은 내가 전에 언젠가 읽었던 내 마음 속으로 쏟아져 나왔다. 이것은 가독성의 문제입니다.

다음 C #코드를 고려하십시오.

(customer == null) ? "" : customer.Name

(customer == null) ? string.empty : customer.Name

나는 개인적으로 후자를 모호하지 않고 쉽게 읽을 수있다.

다른 사람들이 지적한 바와 같이 실제 차이는 무시할 수 있습니다.


1

내 코드에서 노란색으로 색이 지정 될 것이기 때문에 ""사용합니다 ... Visual Studio Code 테마에서 String.Empty는 모두 흰색입니다. 그리고 나는 그것이 내게 가장 중요하다고 믿습니다.


0

나는 두 번째 것이 "적절하다"고 생각하지만 솔직히 말해서 나는 그것이 중요 할 것이라고 생각하지 않는다. 컴파일러는 똑같은 바이트 코드를 컴파일 할만큼 똑똑해야합니다. 나는 나 자신을 사용한다.


0

http://blogs.msdn.com/b/brada/archive/2003/04/22/49997.aspx:

데이빗이 암시 하듯이,String.Empty""꽤 작지만 차이가 있습니다.""실제로 객체를 생성합니다. 문자열 인턴 풀에서 꺼내지 만 그래도 ... whileString.Empty아무 객체도 만들지 않으므로 궁극적으로 궁극적으로 메모리 효율성을 찾고 있다면String.Empty. 그러나, 차이점은 당신이 코드에서 결코 보지 않으려 고하는 trival이라는 것을 명심해야합니다 ...

~에 관해서는System.String.Empty또는string.Empty또는String.Empty... 내 치료 수준이 낮습니다 ;-)


  • 그 MSDN 블로그 게시물은 2003 년에있었습니다 .... 당신은 이것이 최근 .NET 버전에서도 여전히 유효하다는 것을 확신합니까?! - Carsten Schütte
  • @ CarstenSch ü tte : 그런 기능은별로 변하지 않을 것 같았습니다. 그렇다면 인터넷에 관한 소문이있었습니다. - sergiol
  • @sergiol 필드가 리터럴보다 더 효율적이라면 이는 명백하게 성능 버그입니다. 이제는 해결 될 수 있기를 바랍니다. - Konrad Rudolph

0

빈 문자열은 빈 집합과 같습니다. 모든 사람이 호출 할 때 사용하는 이름입니다."". 또한 형식 언어에서 알파벳 길이가 0 인 문자열을 빈 문자열이라고합니다. set과 string에는 모두 특별한 기호가 있습니다. 빈 문자열 : ε 및 빈 집합 : ∅. 이 길이가 0 인 문자열에 대해 이야기하고 싶다면 빈 문자열이라고 부를 것이므로 누구나 당신이 말하는 것을 정확히 알고 있습니다. 이제는 빈 문자열을 왜 사용하지 않는지 이름을 짓습니다.string.Empty코드에서 의도는 명시 적임을 보여줍니다. 단점은 속성과 같이 상수가 아니며 모든 곳에서 사용할 수 없다는 점입니다. (기술적 인 이유로 상수가 아니라 참조 소스를 참조하십시오.)


-1

차이는 매우 적지 만 그 차이는 여전히 존재합니다.

1) ""String.Empty 않는 개체를 만듭니다. 그러나이 객체는 한 번 생성되며 코드에 다른 ""이 있으면 나중에 문자열 풀에서 참조됩니다.

2) 문자열과 문자열은 동일하지만 도트 표기법은 연산자가 아닌 클래스를 나타내며 대문자로 시작하는 클래스는 다음을 준수하므로 String.Empty (String.Format, String.Copy 등)를 사용하는 것이 좋습니다. C #코딩 표준.


  • string.Empty~이다." " 소스를 확인하십시오. - dss539

연결된 질문


관련된 질문

최근 질문