2011-12-03 85 views
2

它說here是可能的類型的enumbytesbyteshortushortintuintlong,或ulong定義枚舉類型爲float或double。如何以某種方式在C#

如果我需要floatdouble來定義百分比增量,例如1.52.5,那麼該怎麼辦?我卡住了嗎?

如這裏說: http://en.csharp-online.net/.NET_Type_Design_Guidelines%E2%80%94Enum_Design

枚舉是一組靜態常量的結構。 遵循這個指南的原因是因爲如果你定義一個枚舉與手動定義一個具有靜態常量的結構 ,你會得到一些額外的編譯器 和反射支持。

既然enum是一組常量,爲什麼我不能有float常量?

更新:據說這裏: http://en.csharp-online.net/.NET_Type_Design_Guidelines%E2%80%94Enum_Design 「你知道CLR支持具有基礎類型float或即使大多數語言不選擇雙枚舉揭露了嗎?」

因爲我只使用c#有一種方法可以做到這一點與一些黑客?

+3

你想在這裏解決什麼問題? – ChrisF

+0

你爲什麼需要這樣做?如果你想要雙常量,枚舉不是正確的方法... –

+0

枚舉是一組常量,默認情況下它是整數常量,爲什麼我不能有浮點常量? – user310291

回答

3

雖然CLR本身支持浮點枚舉,C#的設計者沒有選擇的語言揭露這個(見http://en.csharp-online.net/.NET_Type_Design_Guidelines%E2%80%94Enum_Design)。您可以使用John Saunders的答案中的常量,也可以定義一個具有相乘值的整型枚舉值,然後在需要時將其分回。不過,這個用例肯定會很有趣。你爲什麼需要/想要這個?

+0

我想定義一些不是整數的百分比的固定增量。 – user310291

+1

感謝您的鏈接。正如它所說的「你知道CLR支持具有浮點或浮點類型的枚舉類型,即使大多數語言不選擇公開它嗎?」因爲我只使用C#有沒有辦法做到這一點? – user310291

+0

@ user310291:不,不幸的是,您遇到了發佈的解決方法。你不能使用C#中的浮點枚舉,並且我懷疑你是否真的想直接編寫IL來獲得這個功能...... – Alan

3

你將不得不使用的一組常數:

public const float Percentage1 = 1.5; 
public const float Percentage2 = 2.5; 
5

是的,你被困在那裏。您不能使用浮點類型的enum。您可以使用static class與常量,但是:

public static class MyFloatEnum { 
    public const float One = 1.0; 
    public const float OneAndAHalf = 1.5; 
    // etc. 
} 

而且它將在智能感知有點接近。或者,你可能只是想使用常量:

public const float A = 0.5; 
public const float B = 17.62; 
+0

是的,我可以定義一個靜態類,但如這裏說的http://en.csharp-online.net/.NET_Type_Design_Guidelines%E2%80%94Enum_Design與枚舉,你會得到一些額外的編譯器和反射支持,如果你定義一個枚舉與手動用靜態常量定義一個結構。 – user310291