如何为 C#Auto-Property 提供默认值?我要么使用构造函数,要么还原为旧语法。
使用构造函数:
class Person
{
public Person()
{
Name = "Default Name";
}
public string Name { get; set; }
}
使用普通属性语法 (使用默认值)
private string name = "Default Name";
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
有没有更好的办法?
在 C#5 和更早版本中,要为自动实现的属性提供默认值,您必须在构造函数中执行此操作。
自 C#6.0 以来,包含自动属性初始化程序的能力。语法是:
public int X { get; set; } = x; // C# 6 or higher
编辑 1/2/15
使用 C#6,您可以直接初始化自动属性(最后!),现在线程中有其他答案可以描述。
对于 C#5 及以下:
虽然属性的预期用途不是实际设置属性的值,但您可以使用反射始终设置它们...
public class DefaultValuesTest
{
public DefaultValuesTest()
{
foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(this))
{
DefaultValueAttribute myAttribute = (DefaultValueAttribute)property.Attributes[typeof(DefaultValueAttribute)];
if (myAttribute != null)
{
property.SetValue(this, myAttribute.Value);
}
}
}
public void DoTest()
{
var db = DefaultValueBool;
var ds = DefaultValueString;
var di = DefaultValueInt;
}
[System.ComponentModel.DefaultValue(true)]
public bool DefaultValueBool { get; set; }
[System.ComponentModel.DefaultValue("Good")]
public string DefaultValueString { get; set; }
[System.ComponentModel.DefaultValue(27)]
public int DefaultValueInt { get; set; }
}
当你为变量内联一个初始值时,无论如何都会在构造函数中隐式地完成它。
我认为这种语法是 C#中最佳实践 5 的最佳实践:
class Person
{
public Person()
{
//do anything before variable assignment
//assign initial values
Name = "Default Name";
//do anything after variable assignment
}
public string Name { get; set; }
}
这样可以清楚地控制分配的订单值。
从 C#6 开始,有一种新的方式:
public string Name { get; set; } = "Default Name"