如何有效地将枚举扩展为有 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,但我想要另外两种类型;说R和C。当我将它们添加到 enum 字段时,如何获取类型?上面给出了编译错误,就像使用 Type 作为变量一样。
感谢您的即时帮助!谢谢
真的只有三种明智的方法来解决这个问题:
如果令牌始终与您的枚举成员完全对应,您可以使用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)
这需要一些设置,但它可能是最快的,并且它还允许考虑输入字符串和/或枚举值的变化。
或者,您可以使用自定义属性注释您的枚举成员,并编写一个辅助方法,该方法使用反射根据此属性的值查找正确的成员。这个解决方案有它的用途,但它是最不可能的候选者;大多数情况下,您应该更喜欢这两种选择中的一种。
| 归档时间: |
|
| 查看次数: |
4899 次 |
| 最近记录: |