【问题标题】:How can we extend all enum type?我们如何扩展所有枚举类型?
【发布时间】:2015-03-19 19:26:20
【问题描述】:

我们如何扩展所有枚举类型?

我想用一个名为“ToStringConstant”的新方法来扩展所有枚举类型。此方法将整数值作为字符串返回。这是我目前所拥有的,但编译器不允许在 where 子句中使用枚举。

    public static string ToStringConstant<T>(this T EnumVar) where T : enum
    {
        return ((int)EnumVar).ToString();
    }

例子:

public enum Example
{
    Example = 0
}

void Method()
{
    Example var =  Example.Example;
    var.ToString();//Return "Example"
    var.ToStringConstant();//Return "0"   
}

【问题讨论】:

标签: c# generics enums extension-methods generic-programming


【解决方案1】:

不要使方法通用,只需接受Enum:

public static string ToStringConstant(this Enum EnumVar)
{
    return ((int)EnumVar).ToString();
}

附带说明,强制转换为 long 而不是 int 将确保无论枚举的基础类型如何,代码都能正常运行。

【讨论】:

  • 请注意,对于没有 int 作为其基础类型的枚举类型,这可能会失败。 (这是 OP 代码中的一个问题,但需要注意。)
  • @JonSkeet 好吧,它适用于字节/短或任何其他较小整数类型的枚举。它会在long 上中断,除非你转换为long 而不是int。
  • 出于某种奇怪的原因,编译器说“无法将类型 'System.Enum' 转换为 'int'”。我将改用 Convert.ToDouble...
  • @AXMIM 您应该使用Convert.ToInt64,因为它是整数值,而不是浮点值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-05
相关资源
最近更新 更多