为属性设置默认值

是否可以在没有属性体的情况下设置默认值? 最好带注释。

[SetTheDefaultValueTo(true)] public bool IsTrue { get; set; } [SetTheDefaultValueTo(false)] public bool IsFalse { get; set; } public void Something() { var isTrue = this.IsTrue; var isFalse = this.IsFalse; } 

不,没有内置function可以使用元数据设置属性的值。 您可以使用某种类型的工厂来构建具有reflection的类的实例,然后可以设置默认值。 但简而言之,您需要使用构造函数(或字段设置器……将其提升到构造函数。)设置默认值。

如果你的constuctor有几个重载,你可能想看一下构造函数链 。

使用C#6+你可以做这样的事情……

 public string MyValue { get; set; } = "My Default"; 

哦,它变得更有趣,因为人们甚至要求这样的东西……

 public string MyValue { private string _myValue; get { return _myValue ?? "My Default"; } set { _myValue = value; } } 

…优点是您可以控制字段的范围只能在属性代码中访问,这样您就不必担心在不使用getter / setter的情况下在类中使用状态的任何其他内容。

在类构造函数中指定默认属性值。

 class MyClass { public MyClass() { IsTrue = true; IsFalse = false; } public bool IsTrue { get; set; } public bool IsFalse { get; set; } [...] public void Something() { var isTrue = this.IsTrue; var isFalse = this.IsFalse; } 

}

旧线程。 看起来像微软听说过这个function可以在.Net Framework 4.6+(C#6+)中使用。你可以像使用它一样使用它

 public string MyValue { get; set; } = "My Default"; 

如果您使用的是C#5及更早版本,则必须在构造函数中执行此操作。

但是从C#6.0开始,包含了自动属性初始值设定项的能力,语法为:

 public int myage { get; set; } = 33; 

在这个非常具体的例子中,您可以:

 public bool IsFalse { get; set; } public bool IsTrue { get { return !IsFalse; } set { IsFalse = !value; } } public void Something() { var isTrue = this.IsTrue; var isFalse = this.IsFalse; } 

但是,总的来说,没有。