Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 字符串。空对“&引用;_C# - Fatal编程技术网

C# 字符串。空对“&引用;

C# 字符串。空对“&引用;,c#,C#,可能重复: String.Empty与有何不同?没有什么不同 : 此字段的值是长度为零的字符串“” 在应用程序代码中,此字段最常用于将字符串变量初始化为空字符串的赋值。要测试字符串的值是否为string.Empty,请使用IsNullOrEmpty方法 没有区别。有些人更喜欢使用String.Empty来实现代码可读性。使用您熟悉的对象。字符串。空的对象始终是同一个对象 “始终是一个新对象,垃圾收集器可能必须删除它 因此,应始终使用string.empty而不是“.” string a="";

可能重复:

String.Empty
有何不同?

没有什么不同

:

此字段的值是长度为零的字符串“”

在应用程序代码中,此字段最常用于将字符串变量初始化为空字符串的赋值。要测试字符串的值是否为string.Empty,请使用IsNullOrEmpty方法


没有区别。有些人更喜欢使用
String.Empty
来实现代码可读性。使用您熟悉的对象。

字符串。空的对象始终是同一个对象

始终是一个新对象,垃圾收集器可能必须删除它

因此,应始终使用string.empty而不是“.”

string a="";
string b=string.Empty;
翻译成

IL_0000:  ldstr       ""
IL_0005:  ldsfld      System.String.Empty

大多数情况下,
String.Empty与“
完全相同,但是通常我发现它更易于使用
String.IsNullOrEmpty(str)
,而不必比较
str==”| | str==null
,如果您使用的是.NET 4.0
String.IsNullOrWhiteSpace(str)
则涵盖更多的情况,而且是目前为止最好的。

根据:

正如大卫所暗示的那样,两者之间存在差异 在String.Empty和“”之间是很好的 虽小,但有区别。“” 实际上,它会创建一个对象 很可能是从绳子上拔出来的 实习生池,但仍然…虽然 String.Empty不会创建任何对象…所以如果 你真的在寻找最终的答案 我建议提高内存效率 String.Empty。然而,你应该 请记住,区别是如此巨大 琐碎的你永远也看不到 你的代码

至于System.String.Empty或 字符串。空或字符串。空…我的关心 级别较低;-)

更新(2015年6月3日):

评论中提到,上述引用自2003年的内容不再正确(我假设这是指
实际创建了一个对象的语句)。因此,我刚刚在C#5(VS 2013)中创建了几个简单的控制台程序:

这表明当代码开始运行时,
String.Empty
都是内部的,这意味着在所有实际应用中它们是相同的

布拉德评论中最重要的部分是:

你应该记住,区别是如此的琐碎,你会 就像从未在你的代码中看到它一样


这是底线。在“”和String.Empty之间进行选择不是基于性能的决定。根据您认为更具可读性的内容或项目中已经使用的惯例进行选择。

如果在reflector中打开它,您将看到它们是相同的重复:与流行相关的问题不是每次都创建新对象。编译器将把它们全部“链接”到一个空字符串。我在某个地方(对不起,我不记得在哪里)读到空字符串在每个程序集中重复一次。因此,每个使用
而不是
System.String.Empty
的程序集都在浪费宝贵的内存!;-)你的意思是“不使用String.Empty的主要原因是可读性”吗?正如复制品所说,它在.NET2和更高版本中没有区别。在.NET1时代,它是不同的。所以,您将在仍在使用的旧代码中看到String.Empty,它是由经历了.NET1时代的老学究们本能地输入的。善良;它留下了一个标记。你没有抓住要点:
String.IsNullOrEmpty(str)
String.Empty
没有任何关系,只是单词Empty出现在两个地方。
str==“”| | str==null
在我看来非常无效,因为左侧是先计算的。另一个使用
IsNullOrEmpty
方法的原因是:-)在我看来,String.Empty不容易阅读。我不喜欢它。我总是用“”。我们对非空字符串文字使用双引号,因此为了保持一致,我们也应该对字符串文字使用双引号。键入两个引号比string.empty快得多。两个引号是跨平台的。这很简单。我发现
string.Empty
更容易阅读和理解。在快速原型化代码的过程中,我遇到过很多案例,我到处乱扔
,这后来引入了很多bug,因为意图不明确:“我是想说:在这里故意传递空字符串”还是“我忘了在这里传递一个非空字符串了吗”。@GeorgeChakhidze您不需要字符串。空的,因为您也可以在创建原型时为空字符串引入一个字母常量
class Program
{
    static void Main()
    {
        // Outputs "True"
        Debug.WriteLine(string.IsInterned(string.Empty) != null);
    }
}

class Program
{
    static void Main()
    {
        // Outputs "True"
        Debug.WriteLine(string.IsInterned("") != null);
    }
}