C#에서는 문자열을 사용해야 합니까?[ Empty ]또는 [String]입니다.문자열을 초기화하려면 비워두시겠습니까? 아니면 " "?
C#에서는 빈 문자열로 문자열 값을 초기화합니다.
어떻게 해야 되지?올바른 방법은 무엇이며, 그 이유는 무엇입니까?
string willi = string.Empty;
또는
string willi = String.Empty;
또는
string willi = "";
아니면 뭐야?
당신과 당신의 팀이 가장 읽기 쉽다고 생각하는 것을 사용하세요.
다른 에서는 '나다'를 사용할 .""
이는 사실이 아닙니다.스트링 인터닝으로 인해 어셈블리에 1회 또는 AppDomain에 1회(또는 프로세스 전체에 1회) 작성됩니다.이 차이는 무시할 수 있습니다.대단히, 극히 미미한 것입니다.
하지만 어떤 것이 더 읽기 쉽다는 것은 다른 문제이다.이것은 주관적이고 사람에 따라 다를 것입니다.따라서 팀원 대부분이 무엇을 좋아하는지 알아보고 일관성을 유지하기 위해 모두 그것을 따르는 것이 좋습니다.저는 개인적으로""
읽기 쉬워요.
「 」라고 하는 ""
★★★★★★★★★★★★★★★★★」" "
서로 오해받기 쉽다는 건 나랑 잘 안 씻는 것 같아.비례 글꼴을 사용하지 않는 한(또한 사용하는 개발자와 함께 작업한 적이 없습니다) 차이를 구별하는 것은 매우 쉽습니다.
퍼포먼스나 코드 생성의 관점에서는, 실제로는 차이가 없습니다.퍼포먼스 테스트에서는, 어느 쪽이 고속인지 다른 쪽보다 고속인지, 몇 밀리초 밖에 되지 않았습니다.
비하인드 코드를 봐도 전혀 차이가 없습니다.입니다. 은 IL입니다. IL은 IL입니다. IL★string.Empty
opcode를 ldsfld
★★★★★★★★★★★★★★★★★」""
opcode를 합니다.ldstr
, 는 '''가 원인일 string.Empty
두 명령 모두 같은 동작을 합니다.이치노
C# 코드
private void Test1()
{
string test1 = string.Empty;
string test11 = test1;
}
private void Test2()
{
string test2 = "";
string test22 = test2;
}
IL 코드
.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
코딩의 기본적인 특성은 프로그래머로서 우리의 임무는 우리가 내리는 모든 결정이 트레이드오프라는 것을 인식하는 것입니다.[…] 간결하게 시작합시다. 테스트에서 필요에 따라 다른 치수를 늘립니다.
코드 더입니다: "Prefer" (우선) "Prefer" (우선) "Prefer" (우선) "Prefer" (우선) "Prefer" (우선) "Prefer" (우선) "Prefer" (우선)""
로로 합니다.string.Empty
★★★★★★★★★★★★★★★★★」String.Empty
이들 2개는 6배 더 길어지고 추가 혜택은 없습니다.동일한 정보를 표현하기 때문에 명확성은 확실히 향상되지 않습니다.
가지 점은 '확인하다'를하면 '확인하다'라는 죠.switch-case
이렇게 쓰면 안 요.case string.Empty:
상수가 아니기 때문입니다.그 결과,Compilation error : A constant value is expected
자세한 내용은 string-empty-versus-empty-quotes 링크를 참조하십시오.
string
로로 합니다.String
. 을 선택합니다string.Empty
에 걸쳐서""
하나를 선택하고 그것을 고수하는 것이다.「 」를 string.Empty
하고, 하지 않는를 복사하지 것입니다."\x003"
안에서""
.
내가 끼어들려고 했던 건 아닌데, 잘못된 정보가 여기서 던져지고 있는 것 같아.
는 개인적으로 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★.string.Empty
그것은 개인적인 취향이며, 저는 케이스 바이 케이스로 함께 일하는 어떤 팀의 뜻에 따르게 됩니다.
몇몇 사람들이 언급했듯이, 와는 전혀 차이가 없다.string.Empty
★★★★★★★★★★★★★★★★★」String.Empty
또, 이것은 조금 알려진 사실이지만, 「」를 사용하는 것은 지극히 허용됩니다."의 모든 인스턴스는 다른 환경에서 개체를 만듭니다.하지만.NET은 문자열을 인턴으로 하기 때문에 향후 인스턴스는 인턴 풀에서 동일한 불변의 문자열을 꺼내 퍼포먼스에 미치는 영향은 무시할 수 있습니다.출처 : Brad Abrams.
저는 개인적으로 더 복잡한 것에 대한 정당한 이유가 없는 한 ""를 선호합니다.
String.Empty
★★★★★★★★★★★★★★★★★」string.Empty
등합니니다다String
는 BCL 이름입니다.BCL은 BCL 클래스 이름입니다.string
C# 에또또 ( C # 또또또또또 。★★★와 Int32
★★★★★★★★★★★★★★★★★」int
자세한 예는 문서를 참조해 주세요.
""
걱정돼서 잘 모르겠어요
는 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★.string.Empty
.
에서 다음 방법을 사용하여 간단한 테스트를 수행했습니다.NET v4.5 콘솔 애플리케이션:
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
,str2
★★★★★★★★★★★★★★★★★」str3
되는 것은 내의 ) 있습니다.
그래서 내부적으로 그들은 차이가 없다.결론부터 말하면, 고객님과 고객님의 팀이 어느 쪽을 사용하고 싶은가 하는 것입니다.이 문자열 클래스의 동작은 에서는 문자열 인터닝이라고 불립니다.NET 프레임워크Eric Lippert는 이 개념을 설명하는 매우 멋진 블로그를 여기에 게재하고 있습니다.
이 토픽은 꽤 오래되고 길기 때문에, 이 동작이 다른 장소에서 언급되고 있는 경우는 양해 바랍니다(그리고, 이 토픽에 관한 답변을 참조해 주세요).
에서 컴파일러의 동작에 가 있는 .string.Empty
이치노문자열로 초기화된 문자열 변수를 사용하지 않으면 차이가 나타납니다.비어 있거나 큰따옴표로 둘러싸여 있습니다.
「 」로 string.Empty
후 컴파일러 설명합니다.
CS0219 - The variable 'x' is assigned but its value is never used
큰따옴표로 초기화할 경우 예상되는 메시지가 나타납니다.
이 동작에 대해서는 다음 링크의 Connect 기사를 참조하십시오.https://connect.microsoft.com/VisualStudio/feedback/details/799810/c-warning-cs0219-not-reported-when-assign-non-constant-value
기본적으로 내가 맞히면 프로그래머가 경고 메시지로 방해받지 않고 디버깅을 위해 함수의 반환값으로 변수를 설정할 수 있도록 하고 싶기 때문에 중요한 할당과 문자열의 경우에만 경고를 제한했습니다.공허는 상수가 아니라 필드입니다.
년 ★★★★
Microsoft 에서는, https://connect .microsoft.com 의 Web 사이트를 폐기하고 있기 때문에, 그 후의 논의는 할 수 없습니다.그러나 이전 이유를 확인할 수 있는 흥미로운 발언과 함께 https://learn.microsoft.com/en-us/dotnet/csharp/misc/cs0219라는 기사가 있습니다.
컴파일러는 변수 값이 컴파일 시간 상수인 경우에만 이 경고를 생성합니다.로컬 변수에 일정하지 않은 식 또는 메서드 결과를 할당하면 디버거에서 이러한 식을 쉽게 관찰할 수 있습니다.또한 결과에 도달할 수 있도록 하여 변수에 도달할 수 있는 동안 가비지 수집을 방지합니다.
"의 의미를 아는 개발자는 거의 없습니다.저는 개인적으로 String을 만났어요.처음에 비우고 구글을 검색하면서 그것들이 정말 같은 것인지 알아내야 했다.
상기 중 하나.
왕위 계승에는 더 좋은 일이 많이 있다.나무껍질이 어떤 색이 가장 잘 어울리는지 등, 흐릿한 갈색에 이끼가 끼었다고 생각합니다.
String이 너무 좋아요.내용물을 실수로 삭제한 것이 아니라 주로 국제화를 위해 내용을 삭제한 다른 이유를 제외하고 비어 있습니다.따옴표 안에 문자열이 있으면 항상 새로운 코드인지 아닌지가 궁금하고 문자열 테이블에 넣을 필요가 있습니다.따라서 코드가 변경/검토될 때마다 "따옴표 안에 있는 것"을 찾아야 합니다. 빈 문자열은 걸러낼 수 있지만 현지화되지 않는 한 따옴표 안에 문자열을 넣지 않는 것이 좋습니다.
Visual Studio String에서 문자열과 다른 색상으로 코딩된다는 사실은 아무도 언급하지 않았습니다.가독성을 위해 중요합니다.또한, 소문자는 보통 var와 type에 사용되며, 큰 문제가 아니라 String에 사용됩니다.빈 값은 상수이며 변수나 유형이 아닙니다.
string
입니다.System.String
타입은 동일합니다.
.string.Empty == String.Empty == ""
문자 「」를, 「」를 사용합니다.string.Empty
★★★★★★★★★★★★★★★★★」String.Empty
의 뜻을 쉬워요 - 프로그래머의 뜻을 보다 알 수 있습니다.
★★★ string
★★★★★★★★★★★★★★★★★」String
요.string
몇년 같이 은 소문자로 되어 있기 때문에 더 .string
.
제가 있을 예요.string.Empty
string.Empty
에 걸쳐서String.Empty
수에, 「사용할 수 있습니다.」를 됩니다.using System;
일일을파
""
에 걸쳐서string.Empty
이것은 개인적인 취향이며, 당신의 팀에 의해 결정되어야 합니다.
난 달라지지 않아.마지막이 입력이 가장 빠릅니다.
이것은 완전히 코드 스타일의 기본 설정입니다. 방법에 대해 수행하십시오.NET은 문자열을 처리합니다.단, 제 의견은 다음과 같습니다.
메서드, 및합니다.「 」 、 「 」 、 「 」 、 [ BCL ] 。String.Empty
★★★★★★★★★★★★★★★★★」Int32.TryParse(...)
★★★★★★★★★★★★★★★★★」Double.Epsilon
새로운 는 항상 C은 C#으로 선언합니다.int i = 0;
★★★★★★★★★★★★★★★★★」string foo = "bar";
코드를 스캔하여 재사용 가능한 이름 있는 상수로 결합할 수 있기 때문에 선언되지 않은 문자열 리터럴은 거의 사용하지 않습니다.컴파일러는 상수를 리터럴로 대체하기 때문에 이는 마법의 문자열/숫자를 피하고 이름에 의미를 부여하기 위한 방법에 가깝습니다.또한 값을 쉽게 변경할 수 있습니다.
상관없다. 그들은 정확히 같은 것이다.하지만 중요한 것은 일관성이 있어야 한다는 것이다.
추신. 저는 항상 이런 종류의 "누가 옳은 일"과 씨름하고 있어요.
가 직접 목격했습니다.""
2번입니다. 번은 팀 개발자의 로 인한 한 은 팀 기반 프로그래밍을 사용하지 않고 .string.Empty
두가가가문문문겁겁겁겁겁겁
네, 이것은 매우 판단적인 호출이지만, 어떤 언어가 당신에게 여러 가지 방법을 줄 때, 저는 컴파일러의 감시와 컴파일 시간의 실행이 가장 강한 언어로 기울어지는 경향이 있습니다.그렇지 않다 ""
모든 것은 구체적인 의도를 표현하는 것입니다.
「 」라고 하면,string.EMpty
or or or openicle. Strng.Empty
컴파일러는 사용자가 잘못했음을 알려줍니다.지금 당장.컴파일이 되지 않습니다.개발자는 컴파일러(또는 다른 개발자)가 어떤 식으로든 잘못 해석할 수 없는 특정 의도를 언급하고 있으며, 이를 잘못 해석해도 버그를 만들 수 없습니다.
「 」라고 하면," "
당신이 말하는 것은""
반대로 컴파일러는 당신이 시키는 대로 기꺼이 할 수 있습니다.다른 개발자가 사용자의 특정 의도를 수집하지 못할 수도 있습니다.버그가 생성되었습니다.
string.Empty
표준 라이브러리를 사용해 본 적이 있습니다.EMPTY_STRING
일정한.우리는 여전히 그 상수를 사용합니다. string.Empty
사용할 수 없습니다.
가능한 한 컴파일러를 가동시켜, 아무리 작은 것이라도 사람의 실수일 가능성을 배제합니다.IMO는 다른 사람들이 인용한 것처럼 "가독성"을 능가합니다.
특정성 및 컴파일 시간 적용저녁 식사에 필요한 거야.
세 번째를 사용하지만, 나머지 두 가지 중 첫 번째가 덜 이상한 것 같습니다.문자열은 String의 별칭이지만, 할당에서 그것들을 보는 것은 기분이 좋지 않습니다.
처음 두 개 중 어느 것이든 나는 받아들일 수 있을 것이다.따옴표 사이에 공간을 두면 비교적 버그를 도입하기 쉽기 때문에 마지막 것은 피하고 싶습니다.이 특정 버그는 관찰로는 발견하기 어려울 것입니다.오타가 없다고 가정하면, 모든 것이 의미론적으로 동등합니다.
[편집]
항상 한 쪽을 수도 있습니다.string
★★★★★★★★★★★★★★★★★」String
하지만 그건 저뿐이에요
코드를 보고 있는데, 예전에 읽은 적이 있는 질문이 떠올랐습니다.이것은 확실히 가독성의 문제이다.
다음 C# 코드를 고려하십시오.
(customer == null) ? "" : customer.Name
대
(customer == null) ? string.empty : customer.Name
나는 개인적으로 후자가 덜 모호하고 읽기 쉽다고 생각한다.
다른 사람들이 지적했듯이 실제 차이는 무시할 수 있다.
차이는 아주 아주 적지만, 그 차이는 여전히 존재합니다.
""
에서는 가 작성됩니다.String.Empty
는 한 번 오브젝트가 있으면 문자열 됩니다.""
암호에 입력되어 있습니다.String
★★★★★★★★★★★★★★★★★」string
동일하지만, 이 기능을 사용하는 것을 권장합니다.String.Empty
)String.Format
,String.Copy
도트 표기법은 연산자가 아닌 클래스를 나타내므로 대문자부터 시작하는 클래스는 C# 부호화 표준에 준거한다.
컴파일러는 장기적으로 모든 것을 동일하게 해야 합니다.코드를 쉽게 읽을 수 있도록 표준을 선택하고 그대로 유지하십시오.
" "를 사용하는 이유는 내 코드에서 독특한 노란색이 되기 때문입니다.어떤 이유로 String.Visual Studio Code 테마에서 Empty는 모두 흰색입니다.그리고 나는 그것이 나에게 가장 중요하다고 믿는다.
저는 두 번째가 "적절"하다고 생각하지만, 솔직히 그건 중요하지 않다고 생각해요.컴파일러는 이들 중 하나를 정확히 동일한 바이트 코드로 컴파일할 수 있을 정도로 스마트해야 합니다.저는 ""를 사용합니다.
http://blogs.msdn.com/b/brada/archive/2003/04/22/49997.aspx의 경우:
데이비드가 암시하는 것처럼, 두 사람 사이에는 차이가 있다.
String.Empty
★★★★★★★★★★★★★★★★★」""
꽤 작지만 차이가 있습니다.""
실제로 객체를 만들고, 문자열 인턴 풀에서 꺼낼 가능성이 높지만, 그래도... 동시에String.Empty
…찾고 , 는 ★★★★★★★★★▼String.Empty
단, 그 차이는 코드에서는 볼 수 없을 정도로 3가지만 유의해야 합니다.
★★★★★★에 대해서System.String.Empty
★★★★★★★★★★★★★★★★★」string.Empty
★★★★★★★★★★★★★★★★★」String.Empty
(-)
은 빈 모든 이 부르는 입니다.""
또한 정규 언어에서는 길이가 0인 알파벳으로 작성된 문자열을 빈 문자열이라고 합니다.세트와 스트링 모두 특별한 기호가 있습니다. 문자열: " 및 빈 " . " " " " " " " " " "이 제로 길이의 스트링에 대해 설명하려면 빈 스트링이라고 부르면 모든 사람이 무엇을 참조하고 있는지 정확하게 알 수 있습니다. 경우, 왜 「」를 사용하지 ?string.Empty
코드에서, 그것은 의도가 명시적이라는 것을 보여준다. 자료를 을 사용법참조원을 참조해 주세요).
논란의 여지가 있는 코멘트일 수도 있지만, 일반적으로 Microsoft와 일관되게 행동하면 생활이 편해집니다.우리는 그들이 왜 일을 하는지 깊이 내재된 이유(때로는 매우 엄격하고 때론 허술하다고 생각한다)를 알 수 없다.
어셈블리 파일과 같이 자동으로 생성된 파일에는 "를 사용하기 때문에 저는 그렇게 하고 있습니다.실제로 아래의 ""를 String으로 대체하려고 하면비어있고, 비주얼 스튜디오가 날 덮쳐.논리적인 설명이 있을 것입니다만, 제가 아는 지식이 한정되어 있기 때문에, 그렇게 하면, 대부분의 경우 문제가 해결됩니다.(콘트라: 자동 생성된 파일도 String을 사용하고 있는 것을 알고 있습니다).공허하고, 내 요점을 좀 깨트린다. : )
<Assembly: System.Reflection.AssemblyCulture("")>
<Assembly: System.Reflection.AssemblyDescription("")>
<Assembly: System.Reflection.AssemblyFileVersion("1.0.0.0")>
<Assembly: System.Reflection.AssemblyKeyFile("")>
<Assembly: System.Reflection.AssemblyProduct("")>
<Assembly: System.Reflection.AssemblyTitle("")>
언급URL : https://stackoverflow.com/questions/263191/in-c-should-i-use-string-empty-or-string-empty-or-to-intitialize-a-string
'programing' 카테고리의 다른 글
로컬에서 일부 파일을 무시하도록 git을 설정하려면 어떻게 해야 합니까? (0) | 2023.04.10 |
---|---|
셸 명령이 완료될 때까지 기다립니다. (0) | 2023.04.10 |
SQL Server: Null VS 빈 문자열 (0) | 2023.04.10 |
Swift에서 URL 인코딩 방법 (0) | 2023.04.10 |
merge --squash와 rebase의 차이점은 무엇입니까? (0) | 2023.04.10 |