IList <t>数组和Collection是只读ERROR </t>

时间:2013-11-06 10:03:07

标签: c# .net

在修复一个项目中的bug时发现有趣的问题

IList<int> a =new List<int>();
var b = new int[2];
b[0] = 1;
b[1] = 2;
a = b;
a.Clear();

此代码在a.Clear()上抛出异常; 我知道如何解决它,但我没有明确得到导致此NotSupported异常的所有步骤。为什么编译器没有抛出编译时错误?

1 个答案:

答案 0 :(得分:11)

是的,这是标准C#数组的一个有点烦人的特性:它们实现了IList<>,由C#语言定义。

因此,您可以将标准C#数组分配给IList<>类型,编译器不会抱怨(因为根据语言,数组为IS-A IList<>)。

唉,这意味着您可以尝试做一些事情来更改数组,例如IList<>.Clear()IList<>.Add(),您将收到运行时错误。

有关为什么语言定义如下的一些讨论,请参阅以下主题:

Why array implements IList?