在C#中,我应该使用string.Empty还是String.Empty或“”来intitialize一个字符串?

在C#中,我想用一个空字符串初始化一个字符串值。

我应该怎么做? 什么是正确的方式,为什么?

string willi = string.Empty;

要么

string willi = String.Empty;

要么

string willi = "";

或者是什么?


使用任何你和你的团队发现的最具可读性。

其他答案建议每次使用""时都会创建一个新字符串。 这不是真的 - 由于字符串interning,它会创建一个程序集或每个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.EmptyString.Empty 。 这两个是六倍 ,没有额外的好处 - 当然没有增加清晰度,因为他们表达了完全相同的信息。

链接地址: http://www.djcxy.com/p/52837.html

上一篇: In C#, should I use string.Empty or String.Empty or "" to intitialize a string?

下一篇: What's so great about Func<> delegate?