繁体   English   中英

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

[英]How to initialize a string to “” when using auto-implemented property

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

public string Blah {get; set;}

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

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

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

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

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

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

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

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

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

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

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

    private string mName;
}

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

你可以使用这个属性......

Blah = String.Empty;

...但我很确定这是默认的(字符串)。 对不起,默认(字符串)确实为空。 但设置属性工作得很好。 :)

在(无参数)构造函数中设置所有默认值...

public MyClass()
{
    Blah = string.Empty;
}

如果你缺少一个构造函数,也许可以考虑采用另一种方式

  private string Blah = "";

  public string Bleh {
     get { return Blah;  }
     set { Blah = value; }
  }

只是提醒将字符串初始化为“”不是一个好习惯。 在获取值之前,字符串应保持为null。

只是为了挑战你的假设,为什么有一个null是一个问题? 在某些情况下,这是一个非常有意义的状态。 使用类的属性时,可以始终使用string.IsNullOrEmpty(p.Name)测试。

我发现迟钝的类比有帮助。

  • string = empty - >当他回到家时,孩子忘了脱鞋
  • string = null - >当他回到家时,孩子没有鞋子起飞

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM