无法在ArrayList和数组

时间:2015-06-11 10:37:12

标签: c# arrays arraylist

我有这样的代码:

foreach (Type t in types ?? asm.GetTypes())

如果没有提供类型,那么应循环ArrayList types中的所有类型或程序集类型。由于System.Array System.Collections.ArrayList IEnumerable实现UrlHelper,我希望循环起作用。

然而编译器抱怨:

  

运营商'??'不能应用于'System.Collections.ArrayList'和'System.Type []'类型的操作数

我想我错过了一些非常明显的东西,但它是什么?

3 个答案:

答案 0 :(得分:3)

您不应该在2015年真正使用ArrayListArrayList不支持IEnumerable<>界面。

您可以强制使用IEnumerable非通用接口:

foreach (Type t in (IEnumerable)types ?? asm.GetTypes())

您的错误发生是因为??运算符未搜索左右之间的最小公共类型。它只是检查是否可以将右类型隐式转换为左类型,或者是否可以将左类型隐式转换为右类型。很明显,Type[]无法转换为ArrayListArrayList无法转换为Type[]

答案 1 :(得分:0)

你可以把我们??两种不同结构的操作员。您的字段&#39;类型&#39;应该是System.Type []才能工作。

答案 2 :(得分:0)

我不确切知道推理是什么,但我想这是类型安全,你可以在ArrayList添加任何内容。

考虑following example

ArrayList al = new ArrayList{1,2,3};
int[] il = new int[]{1,2,3};

两者看起来非常相似,但现在让我们尝试向他们添加一个列表。

ArrayList al = new ArrayList{1,2,3, new ArrayList()};  // succeeds
int[] il = new int[]{1,2,3, new ArrayList() };
  

编译错误(第12行,第31行):无法隐式转换类型&#39; System.Collections.ArrayList&#39;到&#39; int&#39;

这让我相信编译器认为既然你最初希望使用一个arraylist,你就不能保证每个元素都是Type类型的