使用 enum c# 分配属性的最佳方法

Ata*_*gun 0 c# enums

如何有效地将枚举扩展为有 2 个以上的选项。我正在逐行读取文件中的事件。我有一个构造函数

public enum EventType
{ A,D }

public class Event
{
    public EventType Type { get; set; }

}
Run Code Online (Sandbox Code Playgroud)

我像这样分配了 Type 属性:

 Type = tokens[2].Equals("A") ? EventType.A : EventType.D,
Run Code Online (Sandbox Code Playgroud)

哪里token[2]是包含“A”等值的字符串。

这在只有Aand时工作正常D,但我想要另外两种类型;说RC。当我将它们添加到 enum 字段时,如何获取类型?上面给出了编译错误,就像使用 Type 作为变量一样。

感谢您的即时帮助!谢谢

Jon*_*Jon 5

真的只有三种明智的方法来解决这个问题:

枚举.TryParse

如果令牌始终与您的枚举成员完全对应,您可以使用Enum.TryParse

EventType type;
if (Enum.TryParse(tokens[2], out type)) {
    Type = type;
}
else { /* token does not exist as an enum member */ }
Run Code Online (Sandbox Code Playgroud)

这种方法是最简单的,但它可能比下一种方法慢,而且它还有另一个缺点:提供代码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
Run Code Online (Sandbox Code Playgroud)

这需要一些设置,但它可能是最快的,并且它还允许考虑输入字符串和/或枚举值的变化。

使用属性

或者,您可以使用自定义属性注释您的枚举成员,并编写一个辅助方法,该方法使用反射根据此属性的值查找正确的成员。这个解决方案有它的用途,但它是最不可能的候选者;大多数情况下,您应该更喜欢这两种选择中的一种。