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


当前回答

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

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

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

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

其他回答

在2.0版本之前的。net中,""创建一个对象while字符串。Empty不会创建objectref,它会生成string。放空更有效率。

在。net 2.0及以后版本中,所有出现的""都指向相同的字符串字面值,这意味着""相当于. empty,但仍然不如. length == 0快。

. length == 0是最快的选项,但是. empty会使代码更简洁。

有关更多信息,请参阅. net规范。

因为字符串。Empty不是编译时常量,不能在函数定义中使用它作为默认值。

public void test(int i=0,string s="")
    {
      // Function Body
    }

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

字符串。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

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

string mystring = "";
ldstr ""

LDSTR将一个新的对象引用推入存储在元数据中的字符串字面值。

string mystring = String.Empty;
ldsfld string [mscorlib]System.String::Empty

LDSFLD将静态字段的值推入计算堆栈

我倾向于使用String。用空代替"",因为在我看来,这样更清晰,也不那么vb。