有没有可能在不使用属性主体的情况下设置默认值?最好是使用注释。
[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;
}
public string MyValue { get; set; } = "My Default";
哦,这更有趣了,因为人们甚至请求像这样的东西...
// this code won't compile!
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;
}
}
如果您使用的是C#5或更早版本,则必须在构造函数中完成此操作。
但自C# 6.0以来,已经包括了具有自动属性初始化程序的功能,并且语法如下:
public int myage { get; set; } = 33;
旧帖。 看起来微软已经听取意见,在 .Net Framework 4.6+ (C# 6+) 中提供了这个功能。 您可以像这样使用它:
public string MyValue { get; set; } = "My Default";
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;
}
但是一般来说是不行的。