为什么我可以将一个数组传递给接受 IList 的方法,但尝试使用此接口时却出现错误(数组显然不支持 Add())
using System.Collections.Generic;
public class Program
{
public static void Main()
{
string[] thisIsArray = ["A", "B"];
IsThisBug(thisIsArray);
}
public static void IsThisBug(IList<string> array) {
array.Add("Hello");
}
}
支持这样的接口通常很有用- 即使不是每个方法都可以完全实现;例如,与限制性更强的 不同
ICollection
,IList
还添加了this[int index] {get;set;}
数组可以支持的索引器 - 因此,如果数组仅实现ICollection
,则会丢失一些其他有用的功能。它还具有 属性.IsFixedSize
,这是您在尝试使用 之前应该检查的.Add(...)
,因此NotSupportedException
并不奇怪。这不是一个错误, Array确实实现了 IList,但是某些操作会抛出 NotSupportedException
Array
确实实现了,IList
除了它特别引发了一个异常,Add
你可以在源代码中看到