Welche bevorzugen Sie für Schnittstellen: T [], IEnumerable <T>, IList <T> oder andere?

Ok, ich hoffe, dass die Community uns dabei helfen wird, eine Debatte am Arbeitsplatz zu lösen, die schon eine Weile andauert. Dies hat mit der Definition von Schnittstellen zu tun, die Listen eines bestimmten Typs akzeptieren oder zurückgeben. Hierfür gibt es verschiedene Möglichkeiten:

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

Ich bevorzuge IEnumerable für Argumente und Arrays für Rückgabewerte:

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

Mein Argument für diesen Ansatz ist, dass die Implementierungsklasse eine Liste direkt aus dem IEnumerable erstellen und diese einfach mit List.ToArray () zurückgeben kann. Einige glauben jedoch, dass IList anstelle eines Arrays zurückgegeben werden sollte. Das Problem, das ich hier habe, ist, dass Sie es jetzt erneut mit einer ReadOnlyCollection kopieren müssen, bevor Sie zurückkehren. Die Option, IEnumerable zurückzugeben, scheint für den Client-Code problematisch zu sein.

Was verwenden Sie / bevorzugen Sie? (insbesondere in Bezug auf Bibliotheken, die von anderen Entwicklern außerhalb Ihrer Organisation verwendet werden)

Antworten auf die Frage(8)

Ihre Antwort auf die Frage