Por que posso passar um array para um método que aceita IList, resultando em erro ao tentar usar esta interface (o array não suporta Add() obviamente)
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");
}
}
Geralmente é útil o suficiente para suportar tal interface - mesmo que nem todo método possa ser totalmente implementado; por exemplo, diferentemente do mais restritivo
ICollection
,IList
também adiciona othis[int index] {get;set;}
indexador que um array pode suportar - então se o array implementasse apenasICollection
, alguns outros recursos úteis seriam perdidos. Ele também tem a.IsFixedSize
propriedade , que é o que você deve verificar antes de tentar usar.Add(...)
, então oNotSupportedException
não é uma surpresa.Não é um bug, Array de fato implementa IList , mas no sentido de que algumas operações lançam NotSupportedException
Array
de fato implementa,IList
exceto que ele especificamente lança uma exceção naAdd
qual você pode ver na fonte