因此,目前有一個枚舉用於應用程序的狀態。然而,使用它反對UI時會感覺到一些東西。在填充下拉菜單時,要在整數和字符串之間進行許多轉換。我可以使用擴展方法或類型轉換器,並繼續使用枚舉,如果枚舉在其中包含多個單詞,將會很有幫助。什麼使用除了枚舉的c#
以爲我會在深入挖掘之前詢問有關填充可能的洞的信息。
謝謝。
因此,目前有一個枚舉用於應用程序的狀態。然而,使用它反對UI時會感覺到一些東西。在填充下拉菜單時,要在整數和字符串之間進行許多轉換。我可以使用擴展方法或類型轉換器,並繼續使用枚舉,如果枚舉在其中包含多個單詞,將會很有幫助。什麼使用除了枚舉的c#
以爲我會在深入挖掘之前詢問有關填充可能的洞的信息。
謝謝。
如果您使用的變量具有有限且衆所周知的可能狀態數,那麼枚舉確實是您使用的正確構造。有許多可行的方法可以使UI更方便的工作,並且您已經列舉了兩種優秀的方法,即類型轉換器和擴展方法。
我的團隊在我們最近的項目中遇到了這個問題。我們保留枚舉,因爲它們是用於已知常量值的有限列表的東西,但我們做了一些事情來使它們對開發更友好:
因此,考慮到以下幾點:
public enum MyItems
{
[Description("Item One")]
ItemOne,
[Description("Item Two")]
ItemTwo,
[Description("Item Three")]
ItemThree
}
,我們可以在兩行填充人性化的選擇一個DropDownList:
foreach(MyValues value in Enum.GetValues<MyValues>())
myDDL.Items.Add(New ListItem(value.GetDescription(), value.ToString())
......然後我們就可以解析的選擇以非常可讀的代碼退出:
var theValue = myDDL.SelectedItem.Value.ParseEnum<MyValues>()
編輯:我已被問爲GetDescription()方法。我對分享整個事情有點不滿意,但這裏是獲取裝飾枚舉常量的Description屬性的基本算法。解析一個CamelCased的名字是非常簡單的RegEx以大寫字母分割,我們的實現有點天真。此代碼段需要System.ComponentModel.DescriptionAttribute(這也是枚舉常數裝飾)和enumType是擴展方法的「本」參數,類型的枚舉:
var attr = enumType.GetType().GetField(enumType.ToString())
.GetCustomAttributes(typeof(DescriptionAttribute), false);
if (attr.Length > 0)
return ((DescriptionAttribute)attr[0]).Description;
所有非常好的建議。任何時候我建立一個新的項目我的解析
哎呀!美:-)我可以問你的GetDescription擴展名。爲了同樣的目的,我寫了一個帶有枚舉名稱的特殊字典類,但是你的方法似乎更加乾淨。 – greenoldman 2010-09-01 06:17:20
通過在代碼中對用戶可見名稱進行硬編碼,如果客戶決定他們想要看到「Item 1」而不是「Item One」,那麼您正在承諾重新構建和重新分發整個應用程序。您還通過使用資源文件/附屬程序集來防止系統本地化。 – mikemanne 2010-09-01 16:12:48
枚舉樣構建絕對是正確的選擇。如果由於某種原因你不想使用熟悉的內置方式,你可以讓自己更加實用。這裏的基本思路:
class Country {
private static Country US;
private static Country JP
static Country() { //initialize static variables }
private Country(string name) { //initialize variables of Country instance }
}
有一個這樣的設計模式,但我忘了名字。
我記得在某個地方做了這個,但是這對於一個枚舉來說真的更可取,還是有很大的區別?枚舉確實給了我一個整數值來對應我的數據庫中的ID iny,這意味着少一次轉換。關閉做一些研究,謝謝。 – Aur 2010-09-01 01:56:34
有一個類似的,無關的問題與一些很好的迴應:http://stackoverflow.com/questions/1970594/enums-or-tables – 2010-08-31 21:44:21
是否正確假設您使用的用戶界面是與wpf? – 2010-08-31 21:44:41
你是否反對寫一個可以做同樣事情的靜態類,以避免出現拳擊問題? – joshlrogers 2010-08-31 21:46:05