我想知道哪种是在C#中声明字符串的首选方法:
string strEmpty = String.Empty;
或
string strNull = null;
哪种做法更好或这些陈述之间有什么区别。
答案 0 :(得分:7)
第一个答案使字符串的值成为实际的空字符串。将其指定为null会使指针指向任何内容。这意味着如果您尝试执行strEmpty.Function(),则在第二种情况下不起作用。
第一个最初需要更多内存,但更清晰。
正确的答案取决于你接下来会做什么。如果您要重新分配字符串,我会将其设为null
。如果您打算对字符串执行操作(执行函数,追加等),我会将其设为string.empty
。
答案 1 :(得分:7)
区别在于 语义 。
每当你在代码中找到一个NULL指针时,就意味着它真的是 nothing 。这意味着它尚未被初始化为任何东西,因此您无法使用它。
另一方面,空字符串是字符串。它已被初始化,任何查看代码的程序员都会将该字符串视为要使用的有效对象。
例如,考虑将相对URL存储在字符串中。如果您发现该字符串为空,您会认为它指向根路径。但如果它是NULL,你应该认为它不是一个有效的变量 - 它没有被初始化,你不应该使用它。
基于此,您将采用不同的路径 - 空URL表示非常与NULL变量不同。
答案 2 :(得分:3)
没有“最好的”。你做什么取决于你的意思。
空字符串的长度为0,但是字符串。当你绝对必须返回某种字符串时,即使它是零长度,也要这样做。这很少见。
null首先不是字符串,它是一个空指针。当缺少字符串是一个可能影响应用程序其他部分的有意义的条件时,请执行此操作。
答案 3 :(得分:2)
在典型的业务线应用中,语义差异非常明显:Null表示值未知或不适用,Empty表示该值为空白。
在其他类型的应用程序中,语义或多或少取决于您,只要您记录它们并在整个团队中一致地应用它们。
表现没有差异。
答案 4 :(得分:1)
null和empty字符串之间的区别确实是语义上的,但它们在很大程度上是符合惯例的。
在.NET中,System.String
类具有静态方法IsNullOrEmpty
,在大多数情况下最好使用它。