我需要这个:
Plugin.MetaDataType[] fields =
(Plugin.MetaDataType[])
((System.Collections.ArrayList) parameters["fields"])
.ToArray(typeof(Plugin.MetaDataType));
其中Plugin.MetaDataType是Plugin中的整数值的公共枚举,而参数[“fields”]是一个ArrayList,但被视为一个对象。
这会产生一个异常:“源数组中至少有一个元素无法转换为目标数组类型。”即使源数组只包含int元素和整数值的枚举。
上面的代码不起作用,但下面的代码确实如此,即使我认为它应该做同样的事情。为什么上面的代码不起作用,但下面的代码呢?
System.Collections.ArrayList al = (System.Collections.ArrayList)parameters["fields"];
Plugin.MetaDataType[] fields = new Plugin.MetaDataType[al.Count];
for (int i = 0; i < al.Count; i++)
{
fields[i] = (Plugin.MetaDataType)al[i];
}
答案 0 :(得分:2)
您可以明确地将int
转换为enum
值,但ArrayList.ToArray
方法不会将int
值转换为enum
值。
ArrayList
必须包含enum
方法的ArrayList.ToArray
类型的值,以允许转换为enum
类型。
您可以使用Cast
方法为您进行显式转换,而不是自己循环项目:
Plugin.MetaDataType[] fields =
((ArrayList)parameters["fields"]).Cast<Plugin.MetaDataType>().ToArray();