我尝试将一个int数组int[]
转换为Rights
数组Rights[]
,Rights
通过示例Enum
...但它可以是其他类型比权利,但总是从Enum
继承。
我在Type
变量中得到了最终类型。
我可以为Enum[]
创建Rights[]
数组,但不能创建最终的methodInfo.Invoke(obj,param.ToArray())
数组。
List<object> param = new List<object>();
ParameterInfo pi = ...
if (pi.ParameterType.IsArray && pi.ParameterType.GetElementType().IsEnum)
{
List<Enum> enums = new List<Enum>();
foreach (int i in GetTabInt())
{
enums.Add((Enum)Enum.ToObject(pi.ParameterType.GetElementType(), i));
}
param.Add(enums.ToArray()); // got Enum[] not Rights[]
}
感谢您帮助我!
答案 0 :(得分:1)
您需要创建适当类型的数组。由于在编译时不知道类型,因此必须使用Array.CreateInstance()
。您可以使用此辅助方法。
public Array ToEnumArray(Type type, ICollection values)
{
if (!typeof(Enum).IsAssignableFrom(type))
throw new ArgumentException(String.Format("Type '{0}' is not an Enum", type));
var result = Array.CreateInstance(type, values.Count);
var i = 0;
foreach (var value in values)
result.SetValue(Enum.ToObject(type, value), i++);
return result;
}
然后你可以像这样使用它:
ParameterInfo pi = ...;
if (pi.ParameterType.IsArray && pi.ParameterType.GetElementType().IsEnum)
{
var enumArray = ToEnumArray(pi.ParameterType.GetElementType(), GetTabInt());
param.Add(enumArray);
}