Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
在修复一个项目中的错误期间发现有趣的问题
IList<int> a =new List<int>(); var b = new int[2]; b[0] = 1; b[1] = 2; a = b; a.Clear();
此代码在 a.Clear() 上引发异常;我知道如何解决它,但我没有清楚地了解导致此 NotSupported 异常的所有步骤。为什么编译器没有抛出编译时错误?
是的,这是标准 C# 数组的一个有点烦人的特性:它们实现IList<>了 C# 语言定义的 。
IList<>
因此,您可以将标准 C# 数组分配给IList<>类型,编译器不会抱怨(因为根据语言,数组 IS-A IList<>)。
唉,这意味着你可以尝试做一些事情来改变数组,比如IList<>.Clear()or IList<>.Add(),你会得到一个运行时错误。
IList<>.Clear()
IList<>.Add()
有关为什么这样定义语言的一些讨论,请参阅以下线程:
为什么数组实现IList?