【问题标题】:Does T[] implement IList<T>? [duplicate]T[] 是否实现了 IList<T>? [复制]
【发布时间】:2014-04-18 07:35:18
【问题描述】:

我有一个将IList&lt;IElement&gt; 作为参数的类构造函数。

创建类的新实例时,我可以传递 IElement[] 而不是 IList&lt;IElement&gt; 这怎么可能?

【问题讨论】:

  • "How and why is this possible?" - 你应该为点击诱饵或措辞不当的标题获得一个徽章。
  • @RoyiNamir .. 但这与数组协方差无关。
  • @royi 这种行为来自编译器为您实现数组类型的接口,出于各种原因。
  • @RoyiNamir 即使它是不变的,您仍然可以将IElement[] 转换为IList&lt;IElement&gt;,因为一维数组在运行时提供了这个实现。 T[] 实现 IList&lt;T&gt;。请参阅 Adam Houldsworth 链接的帖子。

标签: c#


【解决方案1】:

元素类型为T 的数组派生自IList&lt;T&gt;

这在 mscorlib.dll 的元数据中是不可见的,但继承关系是在运行时在 CLR 中创建的。 C# 和 CLR 都知道数组类型并对其进行特殊处理。

【讨论】:

  • 它确实not ;-)
  • @TimSchmelter 是 too! ...最终;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-04
  • 1970-01-01
  • 2017-06-10
  • 1970-01-01
相关资源
最近更新 更多