C# 通用枚举转换为特定枚举

标签 c# enums

我有接受 "T"类型 的通用方法,这是枚举器。在方法内部,我必须调用辅助类方法,方法名称取决于枚举器的类型。

public Meth<T> (T type) {

    if (typeof(T) == typeof(FirstEnumType)) {
       FirstEnumType t = ??? // I somehow need to convert T type to FirstEnumType
       this.helperFirstCalcBll(t);
    }
    else 
    {
        SecondEnumType t = ??? // I somehow need to convert T type to SecondEnumType
       this.helperSecondCalcBll(t);
    }    
}

最佳答案

没有从任意类型到枚举类型的有效转换,因此这是不允许的。您需要先转换为对象:

FirstEnumType t = (FirstEnumType)(object)type;

这通过向上转换为 object(始终有效)然后向下转换为枚举类型来“欺骗”编译器。假设您已经完成了运行时类型检查,向下转型永远不会失败。然而,如前所述,在 else 分支中实现它并不能保证有效。

一开始有人会质疑为什么该方法甚至是通用的,但这就是使该特定方法起作用的方法。

关于C# 通用枚举转换为特定枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31447161/

相关文章:

c++ - 使用 MSVC++ 编译器打包枚举

c# - 测试具有不同值的函数

c# - .xaml 和 .xaml.cs 文件之间有什么联系

c# - 使用 libgit2sharp 从远程 (git show) 下载一个文件

C# Visio Interop,未调用事件处理程序

swift - 切换文本字段类

c++ - 从 C++ 中的枚举派生

c# - 应该在没有 TestMethod 属性的方法中使用 Assert 吗?

swift - 如何在 Swift 中创建通用枚举的实例

java - 枚举构造函数中的非静态方法引用作为参数