C#int来枚举转换

可能重复:
铸造诠释枚举在C#

如果我有以下代码:

enum foo : int { option1 = 1, option2, ... } private foo convertIntToFoo(int value) { // Convert int to respective Foo value or throw exception } 

转换代码是什么样的?

把你的int赋给Foo就可以了:

 int i = 1; Foo f = (Foo)i; 

如果您尝试转换未定义的值,它仍然可以工作。 唯一可能的后果就是你以后如何使用价值。

如果你真的想确保你的值是在枚举中定义的,你可以使用Enum.IsDefined:

 int i = 1; if (Enum.IsDefined(typeof(Foo), i)) { Foo f = (Foo)i; } else { // Throw exception, etc. } 

但是,使用IsDefined的成本不仅仅是铸造。 你使用哪个取决于你的实现。 您可能会考虑限制用户input,或者在使用枚举时处理默认情况。

还要注意,你不必指定你的枚举inheritance自int; 这是默认行为。

我很确定你可以在这里做明确的投射。

 foo f = (foo)value; 

只要你说enum从intinheritance(?),你有。

 enum foo : int 

编辑是的事实certificate,默认情况下,枚举基础types是int。 但是,您可以使用除char之外的任何整数types。

你也可以从一个不在枚举中的值进行投射,产生一个无效的枚举。 我怀疑这只是通过改变参考的types,而不是实际改变内存中的值。

枚举(C#参考)
枚举types(C#编程指南)

铸造应该足够了。 如果您使用C#3.0,则可以使用方便的扩展方法来parsing枚举值:

 public static TEnum ToEnum<TInput, TEnum>(this TInput value) { Type type = typeof(TEnum); if (value == null) { throw new ArgumentException("Value is null or empty.", "value"); } if (!type.IsEnum) { throw new ArgumentException("Enum expected.", "TEnum"); } return (TEnum)Enum.Parse(type, value.ToString(), true); } 
 if (Enum.IsDefined(typeof(foo), value)) { return (Foo)Enum.Parse(typeof(foo), value); } 

希望这可以帮助

编辑这个答案得到了投票作为值在我的例子是一个string,其中作为问题要求一个int。 我的applogies; 以下应该更清楚一点:-)

 Type fooType = typeof(foo); if (Enum.IsDefined(fooType , value.ToString())) { return (Foo)Enum.Parse(fooType , value.ToString()); } 

你不需要inheritance。 你可以做:

 (Foo)1 

它会工作;)