为属性设置默认值

时间:2010-06-18 16:18:23

标签: c# .net

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

[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;
}

5 个答案:

答案 0 :(得分:34)

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

如果您的构造函数有多个重载,您可能需要查看constructor chaining

使用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的任何其他东西了

答案 1 :(得分:16)

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

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;
    }

}

答案 2 :(得分:7)

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

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

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

答案 3 :(得分:5)

旧线程。 看起来微软听说过这个功能在.Net Framework 4.6+(C#6+)中可用 您可以像

一样使用它
public string MyValue { get; set; } = "My Default";

答案 4 :(得分:1)

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

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;
}

但是,总的来说,没有。