Które preferujesz interfejsy: T [], IEnumerable <T>, IList <T> lub inne?

Ok, mam nadzieję, że cała społeczność pomoże nam w rozwiązywaniu debaty w miejscu pracy, która trwa od jakiegoś czasu. Ma to związek z definiowaniem interfejsów, które akceptują lub zwracają listy pewnego typu. Jest na to kilka sposobów:

public interface Foo
{
    Bar[] Bars { get; }
    IEnumerable<Bar> Bars { get; }
    ICollection<Bar> Bars { get; }
    IList<Bar> Bars { get; }
}

Moja własna preferencja to użycie IEnumerable dla argumentów i tablic do zwracania wartości:

public interface Foo
{
    void Do(IEnumerable<Bar> bars);
    Bar[] Bars { get; }
}

Moim argumentem za tym podejściem jest to, że klasa implementacji może utworzyć List bezpośrednio z IEnumerable i po prostu zwrócić ją za pomocą List.ToArray (). Jednak niektórzy uważają, że zamiast tablicy należy zwracać IList. Problem, który tutaj mam, polega na tym, że teraz musisz ponownie skopiować go za pomocą ReadOnlyCollection przed powrotem. Opcja zwrotu IEnumerable wydaje się kłopotliwa dla kodu klienta?

Czego używasz / preferujesz? (zwłaszcza w odniesieniu do bibliotek, które będą używane przez innych programistów spoza Twojej organizacji)

questionAnswers(8)

yourAnswerToTheQuestion