在。net中,String和。net之间的区别是什么?空和"",他们是可交换的,或者有一些潜在的引用或本地化问题,围绕相等的字符串。空将保证都不是问题?


当前回答

谢谢你的回答。

如果我错了,请原谅我的无知。我使用VB,但我认为如果你测试一个未分配的字符串的长度(即IS Nothing),它会返回一个错误。现在,我在1969年开始编程,所以我已经远远落后了,但是我总是通过连接空字符串("")来测试字符串。例:(无论哪种语言):-

如果string + "" = ""

其他回答

这都不重要!

以前的一些讨论:

http://www.codinghorror.com/blog/archives/000185.html

http://blogs.msdn.com/brada/archive/2003/04/22/49997.aspx

http://blogs.msdn.com/brada/archive/2003/04/27/50014.aspx

从实体框架的角度来看:EF版本6.1.3似乎处理字符串。在验证时,Empty和""不同。

字符串。出于验证目的,Empty被视为空值,如果在Required(带属性)字段上使用,则会抛出验证错误;其中as ""将通过验证而不抛出错误。

这个问题可以在EF 7+中解决。参考: - https://github.com/aspnet/EntityFramework/issues/2610)。

编辑:[Required(AllowEmptyStrings = true)]将解决此问题,允许字符串。为空进行验证。

字符串。Empty不创建对象,而""创建对象。然而,正如这里所指出的,差异是微不足道的。

字符串之间的区别是什么。空和“”,是他们 可以互换

字符串。Empty是一个只读字段,而""是一个编译时常量。他们表现不同的地方有:

c# 4.0或更高版本中的默认参数值

void SomeMethod(int ID, string value = string.Empty)
// Error: Default parameter value for 'value' must be a compile-time constant
{
    //... implementation
}

switch语句中的大小写表达式

string str = "";
switch(str)
{
    case string.Empty: // Error: A constant value is expected. 
        break;

    case "":
        break;

}

属性参数

[Example(String.Empty)]
// Error: An attribute argument must be a constant expression, typeof expression 
//        or array creation expression of an attribute parameter type

我倾向于使用String。空而不是"",原因很简单,但并不明显: “”和“”是不一样的,第一个实际上有16个零宽度字符。显然,没有一个有能力的开发人员会在他们的代码中放入零宽度字符,但如果他们真的这样做了,那将是一个维护的噩梦。

注:

在这个例子中,我使用了U+FEFF。 不确定SO是否会吃掉这些字符,但请自己尝试使用许多零宽度字符中的一个 多亏了https://codegolf.stackexchange.com/,我才发现了这一点