[英]Best way to assign property using enum c#
如何有效擴展枚舉以獲得2個以上的選項。 我正在逐行讀取文件中的事件。 我有一個構造函數
public enum EventType
{ A,D }
public class Event
{
public EventType Type { get; set; }
}
我像這樣分配了Type屬性:
Type = tokens[2].Equals("A") ? EventType.A : EventType.D,
其中token[2]
是包含“A”之類的值的字符串。
當只有A
和D
,這樣可以正常工作,但我希望還有2種類型; 說R
和C
當我將它們添加到枚舉字段時,我該如何獲得該類型? 上面給出了編譯錯誤,就像使用Type作為變量一樣。
感謝您的直接幫助! 謝謝
實際上只有三種明智的方法可以解決這個問題:
如果標記始終與您的枚舉成員完全對應,則可以使用Enum.TryParse
:
EventType type;
if (Enum.TryParse(tokens[2], out type)) {
Type = type;
}
else { /* token does not exist as an enum member */ }
這種方法最簡單,但它可能比下一種方法慢,而且它還有另一個缺點:提供tokens[2]
的代碼的作者tokens[2]
和枚舉的作者必須始終保持代碼同步。
var dict = new Dictionary<string, EventType>
{
{ "A", EventType.A },
{ "D", EventType.D },
// more items here
}
Type = dict[tokens[2]]; // no error checking, please add some
這需要一些設置,但它可能是最快的,它還允許考慮輸入字符串和/或枚舉值的變化。
或者,您可以使用自定義屬性注釋枚舉成員,並編寫一個幫助方法,該方法使用反射根據此屬性的值查找正確的成員。 該解決方案有其用途,但它是最不可能的候選者; 大多數時候你應該更喜歡兩種選擇中的一種。
您可以使用Enum.Parse
來解析字符串。 對於錯誤處理,您可以使用Enum.GetNames(typeof(EventType))
並迭代返回的字符串數組,該數組包含枚舉的所有可能名稱。
var type = (EventType)Enum.Parse(typeof(EventType), tokens[2]);
您可以使用Enum.Parse
來獲取匹配值:
Type = Enum.Parse(typeof(EventType), tokens[2])
如果在EventType
未定義tokens[2]
,則Enum.Parse
會拋出異常,因此您可以使用Enum.IsDefined
來檢查字符串是否存在枚舉值:
Enum.IsDefined(typeof(EventType), tokens[2])
EventType et;
switch(tokens[2])
{
case "A":
et=EventType.A;
break;
case "B":
et=EventType.B;
break;
case "C":
et=EventType.C;
break;
}
return et;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.