为什么 System.Collections.ArrayList of int 不会使用 ToArray 转换为枚举类型
本文关键字:ToArray 转换 类型 枚举 Collections System ArrayList of int 为什么 | 更新日期: 2023-09-27 18:35:20
我需要这个:
Plugin.MetaDataType[] fields =
(Plugin.MetaDataType[])
((System.Collections.ArrayList) parameters["fields"])
.ToArray(typeof(Plugin.MetaDataType));
其中 Plugin.MetaDataType 是插件中整数值的公共枚举,参数["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];
}
可以将int
显式强制转换为enum
值,但ArrayList.ToArray
方法不会将int
值强制转换为enum
值。
ArrayList
必须包含 ArrayList.ToArray
方法的enum
类型的值,以允许转换为enum
类型。
可以使用 Cast
方法为您执行显式强制转换,而不是自己循环项目:
Plugin.MetaDataType[] fields =
((ArrayList)parameters["fields"]).Cast<Plugin.MetaDataType>().ToArray();