这有点奇怪。请原谅下面的半伪代码。我有一个枚举值列表。比如说,就像这样:
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”并将其转换为Types.foo - 不使用开关(因为枚举值是从数据库生成的,可能会更改)。
我希望这有道理吗?知道从哪里开始吗?
答案 0 :(得分:6)
不确定
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
也有一个不区分大小写的重载。
答案 1 :(得分:0)
所以,你想:Enum.Parse(typeof(Types), postbackValue)
还是我错过了什么?
答案 2 :(得分:0)
如果我理解正确,你可以这样做:
Types fooEnum = Enum.Parse(typeof(Types), "foo");