2011-01-14 98 views
18

可能重複:
How do you give a C# Auto-Property a default value?自動屬性與默認值

有沒有提供自動屬性的默認值的任何好方法?

public int HowHigh { get; set; } // defaults to 0

如果沒有明確設置任何地方,我想這是5.你知道它的簡單方法?例如。我可以將它設置在構造函數或其他東西中,但這並不優雅。

UPDATE:C#6已經得到了它:http://geekswithblogs.net/WinAZ/archive/2015/06/30/whatrsquos-new-in-c-6.0-auto-property-initializers.aspx

+0

只在VB.NET中:公共屬性HowHigh As Integer = 42.這將是C#中的粗略語法。 – 2011-01-14 14:51:09

+2

我想要這個:`public int HowHigh {get;組; } = 5;` – 2011-08-02 21:17:49

+2

@ JerryNixon-MSFT:[自C#​​6.0發佈以來,您一定感到很開心](http://www.kunal-chowdhury.com/2014/11/csharp-6-auto-property.html#wQAWULz9VA5JbyLK .97):) – Flater 2017-09-14 14:29:06

回答

11

如果該類型的默認值不足,則唯一的方法是通過構造函數。

10

你可以做的最好的就是設置它在構造函數中,你不能使自動屬性內的變化,你需要一個支持字段和實施的setter /吸氣劑自己,否則。

使用支持字段,你可以寫這樣的事情:

private int _howHigh = 0; 
public int HowHigh { get {return _howHigh; } set { _howHigh = value; } } 
+0

我相信這是最好的解決方案 – 2011-08-02 21:19:31

13

沒有,沒有這樣做的任何好方法 - 基本上,你必須將其設置在構造函數中,這是不愉快。

像這樣的自動屬性有各種限制 - 我最大的抱怨是,沒有辦法創建一個只讀的自動屬性,可以在構造函數中設置,但在其他位置(並且只讀域)。

3

一句話:號

自動屬性是一個招式,只要你需要額外的東西(像一個合理的默認值),你應該恢復到支持字段則性。

我是一個Resharper用戶,它使得從自動到支持的屬性變得輕而易舉。

2

構造函數不是您擁有的唯一選項。

我相信這是最好的:

private int m_HowHigh = 5; 
public int HowHigh { 
    get { return m_HowHigh; } 
    set { m_HowHigh = value; } 
} 

我更喜歡這種爲可讀性目的比男星更()。

這是不是你想要的東西:

[DefaultValue(5)] 
public int HowHigh { get; set; } 

參考:http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute.aspx#Y2248

因爲這僅僅是一個裝飾,不設定值(C#4)。