2010-06-18 73 views
12

是否可以設置一個沒有屬性主體的默認值?最好用註釋。將一個默認值設置爲屬性

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

回答

18

沒有,是在設置與元數據的屬性值的能力沒有內置。你可以使用某種類型的工廠來構建帶有反射的類的實例,然後可以設置默認值。但簡而言之,您需要使用構造函數(或字段設置器...)將其提升到構造函數中。)設置默認值。

如果你有幾個超負荷的建設者,你可能想看看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。

+0

有沒有可以投票選擇此功能的地方? – BrunoLM 2010-06-18 16:39:53

+1

您可能能夠在connect.microsoft.com上找到某些內容。 – 2010-06-18 16:44:44

+1

eek ...我剛剛在CodeProject上找到了這個。它使用反射設置對象構建後的默認值。 http://www.codeproject.com/KB/dotnet/AutoPropsDefaultValues.aspx – 2010-06-18 16:51:34

14

在類構造函數中指定默認屬性值。

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

這看起來更像是他的問題,而不是一個答案。 – 2010-06-18 16:30:40

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

但是,一般來說,沒有。

2

舊線程。 貌似微軟聽到這個功能是.NET Framework中可用的4.6+(C#6+) 您可以如果您正在使用C#5使用它像

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

和更早版本,你必須做的一個構造函數。

但由於C#6.0中,有自動初始化屬性的能力包括在內,語法是:

public int myage { get; set; } = 33; 
相關問題