在ASP.NET(C#)中,在字符串中使用哪个是最佳实践

在ASP.NET(C#)中,在字符串中使用哪个是最佳实践,c#,asp.net,string,null,C#,Asp.net,String,Null,我想知道在C#中声明字符串的首选方法是什么: 或 哪种做法更好,或者这些语句之间有什么区别。第一个答案使字符串的值成为实际的空字符串。将其赋值为null会使指针指向空。这意味着如果您尝试执行strEmpty.Function(),则在第二种情况下将无法工作 第一种方法最初需要更多的内存,但更清晰 正确答案取决于你下一步要做什么。如果您只是要重新分配字符串,我会将其设置为null。如果您打算对字符串执行一些操作(执行函数、追加等),我会将其设置为string.empty没有“最佳”。你做什么取决于

我想知道在C#中声明字符串的首选方法是什么:


哪种做法更好,或者这些语句之间有什么区别。

第一个答案使字符串的值成为实际的空字符串。将其赋值为null会使指针指向空。这意味着如果您尝试执行strEmpty.Function(),则在第二种情况下将无法工作

第一种方法最初需要更多的内存,但更清晰

正确答案取决于你下一步要做什么。如果您只是要重新分配字符串,我会将其设置为
null
。如果您打算对字符串执行一些操作(执行函数、追加等),我会将其设置为
string.empty

没有“最佳”。你做什么取决于你的意思

空字符串的长度为0,但它是字符串。在绝对必须返回某种字符串时执行此操作,即使它的长度为零。这是罕见的

null首先不是字符串,而是null指针。如果缺少字符串是一种有意义的情况,可能会影响应用程序的其他部分,请执行此操作。

差异是语义上的

每当您在代码中发现一个空指针时,这意味着它实际上什么都不是。这意味着它尚未初始化为任何内容,因此您无法使用它

另一方面,空字符串是字符串。它已经被初始化,任何程序员看代码都会把字符串看作是一个有效的对象。 例如,考虑将相对URL存储在字符串中。如果您发现该字符串为空,您会认为它指向根路径。但是如果它是空的,你应该认为它不是一个有效的变量——它没有被初始化,也不应该使用它。
基于此,您将采用不同的路径-空URL表示与空变量非常不同的内容。

空字符串和空字符串之间的区别确实是语义上的,但按照惯例,它们在很大程度上是等价的


在.NET中,
System.String
类有一个静态方法
IsNullOrEmpty
,这是大多数情况下使用的最佳实践。

在一个典型的业务线应用程序中,语义差异非常明显:Null表示值未知或不适用,而Empty表示已知值为空

在其他类型的应用程序中,语义或多或少取决于您,只要您记录它们并在整个团队中一致地应用它们


在性能上没有差别。

在你的问题上加上你正在使用的语言名称会有帮助。(+1)Ya。。请把你关心的语言贴出来,埃里克已经给出了一个很好的答案,我想:)“最好”是什么意思?最好的表现?最佳内存使用?一定要有意义吗?我会从下一次开始记住最好的在最佳性能的意义上“这是罕见的”有点误导。使用诸如String.Empty之类的“null对象”在IMHO中非常常见。实际上,我更喜欢它们,而不是在整个代码中都有一堆空断言。吹毛求疵:我很确定String.Empty版本不会占用更多内存。Empty是interned,因此您只会产生引用的内存开销,它与null引用的大小相同;您不需要承担新字符串对象的成本。但是你和其他回答者是对的,关键问题是你计划如何处理引用,而不是内存成本。
string strEmpty = String.Empty;
string strNull = null;