c# - 创建枚举列表并将其传递给方法

标签 c# generics enums

我创建了一个方法,该方法接受枚举并将其转换为字典,其中每个 int 都与枚举的名称(作为字符串)相关联

// Define like this
public static Dictionary<int, string> getDictionaryFromEnum<T>()
{
   List<T> commandList = Enum.GetValues(typeof(T)).Cast<T>().ToList();
   Dictionary<int, string> finalList = new Dictionary<int, string>();
   foreach (T command in commandList)
   {
    finalList.Add((int)(object)command, command.ToString());
   }
 return finalList;
 }

(ps. 是的,我有一个双重转换,但该应用程序是一个非常便宜和肮脏的 C#-enum 到 Javascript-enum 转换器)。

这可以很容易地像这样使用

private enum _myEnum1 { one = 1001, two = 1002 };
private enum _myEnum2 { one = 2001, two = 2002 };
// ... 
var a = getDictionaryFromEnum<_myEnum1>();
var b = getDictionaryFromEnum<_myEnum2>();

现在,我想知道我是否可以创建一个枚举列表以用于一系列调用以迭代我的调用。

这是在原始问题中:[为什么我不能调用它?]

我应该怎么做才能创建这样的通话?

List<Type> enumsToConvertList = new List<Type>();
enumsToConvertList.Add(typeof(_myEnum1));
enumsToConvertList.Add(typeof(_myEnum2));
// this'll be a loop
var a = getDictionaryFromEnum<enumsToConvertList.ElementAt(0)>();

最佳答案

您不能在运行时指定通用参数类型(好吧,没有反射)。因此,只需创建非泛型方法,它接受 Type 类型的参数:

public static Dictionary<int, string> getDictionaryFromEnum(Type enumType)
{
    return Enum.GetValues(enumType).Cast<object>()
               .ToDictionary(x => (int)x, x => x.ToString());
}

用法:

List<Type> enumsToConvertList = new List<Type>();
enumsToConvertList.Add(typeof(_myEnum1));
enumsToConvertList.Add(typeof(_myEnum2));

var a = getDictionaryFromEnum(enumsToConvertList[0]);

关于c# - 创建枚举列表并将其传递给方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14691312/

相关文章:

python - 从 python 访问 API objc 常量和枚举

c# - 为什么我不能在 Release模式下运行我的 C# 程序?

postgresql - 如何将字符串值转换为枚举

c# - 使用客户端自定义资源 (resx) 以及默认资源

swift - 访问类实异常(exception)部的泛型类类型

Java - Collection.Sort 接口(interface)对象

c# - 为什么不能推断这些泛型类型参数?

sql - sql 表中状态的最佳类型是什么?

c# - List<T> 缺少 .NET Native 序列化代码

c# - 学习CSLA.NET框架