C# 创建枚举列表并将其传递给方法
我创建了一个方法,该方法接受一个枚举并在字典中对其进行转换,其中每个int都与枚举的名称(作为字符串)相关联C# 创建枚举列表并将其传递给方法,c#,generics,enums,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
// 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;
}
//定义如下
公共静态词典getDictionaryFromEnum()
{
List commandList=Enum.GetValues(typeof(T)).Cast().ToList();
Dictionary finalList=新字典();
foreach(commandList中的T命令)
{
Add((int)(object)命令,command.ToString();
}
回归终结者;
}
(顺便说一句,是的,我有一个双重转换,但这个应用程序是一个非常便宜和肮脏的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>();
private enum_myEnum1{one=1001,two=1002};
私有枚举{1=2001,2=2002};
// ...
var a=getDictionaryFromEnum();
var b=getDictionaryFromEnum();
现在,我想知道是否可以创建一个枚举列表,用于一系列调用以迭代调用
这是原始问题:[为什么我不能称之为?]
我应该怎么做才能创建这样的呼叫
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)>();
List enumsToConvertList=新列表();
添加(typeof(_myEnum1));
添加(typeof(_myEnum2));
//这将是一个循环
var a=getDictionaryFromEnum();
简单来说,泛型的类型参数必须在编译时已知
您正试图将运行时System.Type
对象作为泛型类型说明符传递,这是不可能的
至于您试图实现的目标,您的方法实际上不需要是泛型的,因为您总是返回一个
字典。尝试将类型作为参数传递给方法,如@lazyberezovsky所示
为什么我不能叫这个
在这种情况下,您传递的是System.Type
,它不同于泛型说明符,泛型说明符是编译时值。您不能在运行时指定泛型参数类型(当然,没有反射)。因此,只需创建非泛型方法,该方法接受Type
Type的参数:
public static Dictionary<int, string> getDictionaryFromEnum(Type enumType)
{
return Enum.GetValues(enumType).Cast<object>()
.ToDictionary(x => (int)x, x => x.ToString());
}
公共静态词典getDictionaryFromEnum(类型enumType)
{
返回Enum.GetValues(enumType.Cast())
.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]);
List enumsToConvertList=新列表();
添加(typeof(_myEnum1));
添加(typeof(_myEnum2));
var a=getDictionaryFromEnum(enumsToConvertList[0]);
稍后转换为类型:
List<Type> enumsToConvertList = new List<Type>();
enumsToConvertList.Add(_myEnum1);
var a = getDictionaryFromEnum<typeof(enumsToConvertList.ElementAt(0))>();
List enumsToConvertList=新列表();
enumsToConvertList.Add(_myEnum1);
var a=getDictionaryFromEnum();
这里有一个替代方法,它将枚举作为泛型并返回所有成员的字典
public static Dictionary<int, string> ToDictionary<T>()
{
var type = typeof (T);
if (!type.IsEnum) throw new ArgumentException("Only Enum types allowed");
return Enum.GetValues(type).Cast<Enum>().ToDictionary(value => (int) Enum.Parse(type, value.ToString()), value => value.ToString());
}
公共静态字典ToDictionary()
{
var类型=类型(T);
如果(!type.IsEnum)抛出新的ArgumentException(“仅允许枚举类型”);
返回Enum.GetValues(type).Cast().ToDictionary(value=>(int)Enum.Parse(type,value.ToString()),value=>value.ToString());
}
因为泛型中使用的类型与System.Type
s不同。a
的类型是什么?因为泛型只支持静态类型。您正在尝试将类型对象放入泛型方法中的类型参数中。尝试用ObjectType重写getDictionaryFromEnum谢谢你的建议,也很抱歉引起了骚动。谢谢你,我会接受你的回答。我将从我简历的C#栏中删除“高级知识”。@malber也许你只需要读几篇关于泛型和Linq的文章,而不是修改你的简历:)