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
它会工作;)