如何在使用自动实现的属性时将字符串初始化为""

mrb*_*lah 3 c#

当使用自动实现的属性时,如何将字符串设置为"":

public string Blah {get; set;}
Run Code Online (Sandbox Code Playgroud)

Bev*_*van 10

当您使用这样的自动属性时,属性类型的默认值是值,除非您在其他地方初始化它,就像在构造函数中一样:

public class Person
{
    public string Name { get; set; }

    public Person()
    {
        Name = string.Empty;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果您的自动属性具有公共设置器(如上所示),那么您仍然可以向其他人设置名称null,这可能会导致一些问题.

我可以看到两种解决方案,具体取决于您的背景.

首先,将自动属性更改为私有setter:

public class Person
{
    public string Name { get; private set; }

    public Person()
    {
        Name = string.Empty;
    }
}
Run Code Online (Sandbox Code Playgroud)

这可以防止其他任何人改变属性.如果这不方便,您可以使用完整属性,并利用??(null-coalescing)运算符来防止空值:

public class Person
{
    public string Name 
    { 
        get { return mName; }
        set { mName = value ?? string.empty; }
    }

    public Person()
    {
        Name = string.Empty;
    }

    private string mName;
}
Run Code Online (Sandbox Code Playgroud)


Tod*_*pog 7

您表示您"正在使用它进行强类型视图,因此我甚至没有构造函数".如果您无权访问构造函数,则听起来您可能不应该使用自动实现的属性.