c# - 从字符串中获取枚举字段

标签 c# asp.net enums webforms

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

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 - 不使用开关(因为枚举值是从数据库生成的并且可能会更改)。

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

最佳答案

当然:

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

还有一个采用 bool 值的重载,允许您指定不区分大小写: 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 还具有不区分大小写的重载。

关于c# - 从字符串中获取枚举字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6778213/

相关文章:

flutter - Dart 。带参数的枚举

.net - 企业库日志记录未从 ASP.NET 记录到事件日志

c# - 从 ASP.Net 中的 ascx 页面抓取控件

java - 在 Hibernate 和 Spring 中初始化枚举

c# - 有没有办法在 Noda Time 中表示部分日期?

c# - 正则表达式允许某些特殊字符与括号一起使用

java - 枚举常量特定初始化

c# - 获取 AD 计算机描述

c# - 从 SQL CE 获取行的选择到 C#

c# - 如何在 C# 中获取我的 URL 的一部分/子域?