从字符串中获取枚举字段

本文关键字:枚举 字段 获取 字符串 | 更新日期: 2023-09-27 18:03:06

这个有点奇怪。请原谅下面的半伪代码。我有一个枚举值的列表。例如,像这样:

public enum Types
    {
       foo = 1,
       bar = 2,
       baz = 3
    }

在代码中会变成:

Types.foo
Types.bar
Types.baz

现在我有一个下拉列表,包含以下列表项:

var li1 = new ListItem() { Key = "foo" Value = "Actual Representation of Foo" }
var li2 = new ListItem() { Key = "bar" Value = "Actual Representation of Bar" }
var li3 = new ListItem() { Key = "baz" Value = "Actual Representation of Baz" }

为了完整:

dropDownListId.Items.Add(li1); dropDownListId.Items.Add(li2); dropDownListId.Items.Add(li3);

希望每个人都和我在一起。我想做的是在Autopostback上取字符串"foo"并将其转换为类型。Foo -不使用开关(因为枚举值是从数据库生成的,并且可能会更改)。

我希望这是有意义的?你知道从哪里开始吗?

从字符串中获取枚举字段

当然:

Types t;
if(Enum.TryParse(yourString, out t)) // yourString is "foo", for example
{
    // use t
}
else
{
    // yourString does not contain a valid Types value
}

也有一个接受布尔值的重载,允许你指定不区分大小写:http://msdn.microsoft.com/en-us/library/dd991317.aspx

Enum.TryParse是。net 4中的新特性。如果您停留在以前的版本,则必须使用非类型安全的Enum.Parse方法(在转换失败时抛出异常,而不是返回false),如下所示:

try
{
    Types t = (Types)Enum.Parse(typeof(Types), yourString);
    // use t
}
catch(ArgumentException)
{
    // yourString does not contain a valid Types value
}

Enum.Parse也有大小写不敏感的重载。

所以,你想要:Enum.Parse(typeof(Types), postbackValue)

还是我错过了什么?

如果我理解正确的话,你可以这样做:

Types fooEnum = Enum.Parse(typeof(Types), "foo");

见:http://msdn.microsoft.com/en-us/library/essfb559.aspx