C #에서는 빈 문자열로 문자열 값을 초기화하고 싶습니다.
어떻게해야합니까? 올바른 방법은 무엇이며 왜 그렇습니까?
string willi = string.Empty;
또는
string willi = String.Empty;
또는
string willi = "";
또는 무엇을?
답변
당신과 당신의 팀이 가장 읽기 쉬운 것을 사용하십시오.
다른 답변에 따르면 사용할 때마다 새 문자열이 생성됩니다 ""
. 이는 문자열 인터 닝으로 인해 어셈블리 당 한 번 또는 AppDomain 당 한 번 생성되거나 전체 프로세스에 대해 한 번 생성됩니다 (전면에서 확실하지 않음). 대규모, -이 차이는 무시할 대규모 미미.
그러나 더 읽기 쉬운 것은 다른 문제입니다. 주관적이며 개인마다 다르므로 팀의 대부분의 사람들이 좋아하는 것을 찾아 내고 일관성을 유지하기 위해 모든 사람들과 함께하는 것이 좋습니다. 개인적으로 나는 ""
더 쉽게 읽을 수 있습니다.
인수 ""
와 " "
서로 쉽게 착각은 정말 나와 함께 세척하지 않습니다. 당신이 비례 글꼴을 사용하는 (내가 함께 일하지 않는 한 어떤 할 개발자)는 차이를 구별하기 매우 쉽다.
답변
실제로 성능 및 코드 생성 관점과 차이가 없습니다. 성능 테스트에서 이들은 어느 쪽이 더 빠른지 밀리 초 단위로 앞뒤로 이동했습니다.
장면 코드 뒤를 보면 실제로 차이가 보이지 않습니다. 유일한 차이는 IL,에 string.Empty
옵 코드를 사용 ldsfld
하고 ""
옵 코드를 사용 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
답변
코딩의 기본 특성은 프로그래머로서 우리가하는 모든 결정은 트레이드 오프임을 인식하는 것입니다. […] 간결하게 시작하십시오. 테스트에 필요한 다른 치수를 늘리십시오.
결과적으로, 적은 코드는 더 나은 코드는 다음과 같습니다 안함 ""
으로 string.Empty
나 String.Empty
. 이 두 가지는 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 .
답변
좀 더 복잡한 이유가없는 한 개인적으로 “”를 선호합니다.