有没有很好的方法为自动属性提供默认值?
public int HowHigh { get; set; } // defaults to 0
如果没有明确地设置在任何地方,我希望它是5.你知道一个简单的方法吗?例如。我可以在构造函数或其他东西中设置它,但这并不优雅。
答案 0 :(得分:13)
不,没有任何好办法 - 基本上你必须在构造函数中设置它,这是不愉快的。
这样的自动属性有各种限制 - 我最大的抱怨是没有办法创建一个只读的自动属性,可以在构造函数中设置但不在其他地方(并由readonly字段支持)
答案 1 :(得分:12)
你可以做的最好是在构造函数中设置它,你不能在自动属性中进行更改,你需要一个支持字段并自己实现setter / getter。
使用支持字段,您可以编写如下内容:
private int _howHigh = 0;
public int HowHigh { get {return _howHigh; } set { _howHigh = value; } }
答案 2 :(得分:11)
如果类型的默认值不够,那么唯一的方法是通过构造函数。
答案 3 :(得分:3)
总之:不。
自动属性是一个小技巧,只要你需要额外的东西(比如一个合理的默认值),你就应该恢复到支持字段的常规属性。
我是一名Resharper用户,它可以轻松实现从自动到支持的属性。
答案 4 :(得分:2)
构造函数不是您唯一的选择。
我认为这是最好的:
private int m_HowHigh = 5;
public int HowHigh {
get { return m_HowHigh; }
set { m_HowHigh = value; }
}
我更喜欢可读性,而不是ctor()。
这不是你想要的:
[DefaultValue(5)]
public int HowHigh { get; set; }
参考:http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute.aspx#Y2248
因为这只是一种装饰而没有设定值(在C#4中)。