C#int来枚举转换

可能重复:
在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的成本不仅仅是铸造。 你使用哪个取决于你的实现。 您可能会考虑限制用户输入,或者在使用枚举时处理默认情况。

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


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

foo f = (foo)value;

只要你说enum从int继承(?),你就有。

enum foo : int

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

您也可以从不在枚举中的值进行投射,产生无效的枚举。 我怀疑这是通过改变引用的类型而不是实际改变内存中的值来实现的。

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


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

public static TEnum ToEnum<TInput, TEnum>(this TInput value)
{
    Type type = typeof(TEnum);

    if (value == default(TInput))
    {
        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);
}
链接地址: http://www.djcxy.com/p/22509.html

上一篇: C# int to enum conversion

下一篇: Iterating over a stack (reverse list), is there an isempty() method?