为什么不使用ToArray将int的System.Collections.ArrayList转换为枚举类型?

时间:2014-12-23 23:43:26

标签: c# arrays arraylist casting enums

我需要这个:

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];
}

1 个答案:

答案 0 :(得分:2)

您可以明确地将int转换为enum值,但ArrayList.ToArray方法不会将int值转换为enum值。

ArrayList必须包含enum方法的ArrayList.ToArray类型的值,以允许转换为enum类型。

您可以使用Cast方法为您进行显式转换,而不是自己循环项目:

Plugin.MetaDataType[] fields =
  ((ArrayList)parameters["fields"]).Cast<Plugin.MetaDataType>().ToArray();