【问题标题】:C# - Generic enum type castingC# - 通用枚举类型转换
【发布时间】:2014-08-05 05:29:34
【问题描述】:

我对@9​​87654322@s 的泛型类有一些疑问。

首先,我这样声明我的班级:

public class MyClass<TEnum> where TEnum : struct, IConvertible

但是,我收到一个错误,指出我的类不能与类型参数一起使用。

此外,我需要将Enum 的值转换为Integer。我该怎么做?

public void SomeMethod(TEnum value)
{
    int a = (int)value; // Doesn't work, need to cast to Enum first (?).
}

谢谢。

【问题讨论】:

标签: c# generics enums


【解决方案1】:

自从您声明需求 IConvertible 以来,您已经拥有了所需的东西。只需使用 ToInt32 等方法:

public class MyClass<TEnum> where TEnum: struct, IConvertible
{        
    public int SomeMethod(TEnum value)
    {
        return value.ToInt32(null);
    }
}

例如 .NET 类型的小数是一个结构和一个 IConvertble:

MyClass<decimal> test = new MyClass<decimal>();
Console.WriteLine(test.SomeMethod(150m));

对于其他类,请确保您实现了 IConvertible。

【讨论】:

    【解决方案2】:

    您已声明泛型类型参数以实现 IConvertible,并且该接口具有 ToInt32 方法。

    【讨论】:

    • 嘿,我在VBForums认识你,呵呵。我记得你的狗头像!无论如何,ToInt32 需要一些 FormatProvider ...?此外,ToInt32 使用转换。使用 Convert.ToInt32(value) 不是更方便吗?
    • 您应该可以简单地使用null 作为参数值。您可能也可以轻松使用Convert.ToInt32
    猜你喜欢
    • 1970-01-01
    • 2023-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 2017-10-14
    相关资源
    最近更新 更多