Задайте значение по умолчанию для свойства

Можно ли установить значение по умолчанию без тела свойства? Предпочтительно с аннотациями.

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

Ответ 1

Нет, нет встроенной возможности устанавливать значение свойства с метаданными. Вы могли бы использовать какую-то фабрику, которая создала бы экземпляры класса с отражением, а затем могла бы установить значения по умолчанию. Но вкратце, вам нужно использовать конструкторы (или установщики полей..., которые поднимаются в конструкторе.), Чтобы установить значения по умолчанию.

Если у вас есть несколько перегрузок для вашего конструктора, вы можете посмотреть цепочку конструктора.

Используя С# 6+, вы можете сделать что-то вроде этого...

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 ,

Ответ 2

Назначьте значение свойства по умолчанию в конструкторе класса.

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

}

Ответ 3

Если вы используете С# 5 и ранее, вы должны сделать это в конструкторе.

но поскольку С# 6.0, включена возможность инициализаторов свойств auto, а синтаксис:

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

Ответ 4

Старый поток. Похоже, Microsoft слышала, и эта функция доступна в .Net Framework 4.6+ (С# 6+) Вы можете использовать его как

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

Ответ 5

В этом конкретном примере вы можете:

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

Но, вообще говоря, нет.