如果未分配,则为类属性默认值

时间:2015-04-11 13:19:29

标签: c# class properties null default-value

我遇到了以下问题的最佳方法:

public class Address
{
    public Address() { }

    public Address(string street) 
    {
        Street = street;
    }

    public string Street { get; set; }
}

以上代码将创建一个仅包含街道property的地址(对于此示例)。由于string是引用类型,因此默认为null。由于默认情况下街道property将为空,因此此地址class的用户必须先检查property街道是否为空,然后再对其执行操作可能会引发异常

我现在的问题是,

更好
  1. 将所有properties保留在class中,其默认值为string = nullint = 0,...?
  2. 给每个property一个值?这涉及strings不是null而是string.Empty
  3. 这个问题的一般方法是什么?我试图在网上找到一些关于此的信息,但我不知道用好的搜索词来描述我真正想要找到的内容。主要问题归结为:如果未分配或更好地将properties class分配给null default值{} 1}}值?

1 个答案:

答案 0 :(得分:1)

构造函数应始终将对象保持为有效状态。将属性保留在构造函数之外的唯一合法原因是该属性根据您的设计是可选的。如果构造函数保留了未分配的必需属性,则该对象将处于无效状态,因此应修复构造函数。

你问题的答案是"这取决于你的设计":

  • 如果属性是可选的,请将其保留为null
  • 如果属性是必需的并且您有适当的默认值,请将默认值指定给属性
  • 如果属性是必需的且您没有合适的默认值,请确保所有构造函数都指定了必需的属性。

对于像你这样的单属性类,让Street保持未分配状态几乎没有意义,所以我会首先重新评估引入默认构造函数的设计原因。