簡體   English   中英

使用枚舉c#分配屬性的最佳方法

[英]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”之類的值的字符串。

當只有AD ,這樣可以正常工作,但我希望還有2種類型; RC 當我將它們添加到枚舉字段時,我該如何獲得該類型? 上面給出了編譯錯誤,就像使用Type作為變量一樣。

感謝您的直接幫助! 謝謝

實際上只有三種明智的方法可以解決這個問題:

Enum.TryParse

如果標記始終與您的枚舉成員完全對應,則可以使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM