Ok, ich hoffe, dass die Gemeinschaft als Ganzes uns bei der Lösung einer seit einiger Zeit andauernden Debatten am Arbeitsplatz helfen wird. Dies hat mit dem Definieren von Schnittstellen zu tun, die Listen eines Typs annehmen oder zurückgeben. Es gibt mehrere Möglichkeiten, dies zu tun:Welche bevorzugen Sie für Schnittstellen: T [], IEnumerable <T>, IList <T> oder andere?
public interface Foo
{
Bar[] Bars { get; }
IEnumerable<Bar> Bars { get; }
ICollection<Bar> Bars { get; }
IList<Bar> Bars { get; }
}
Meine eigene Präferenz für Argumente und Arrays für Rückgabewerte IEnumerable zu verwenden ist:
public interface Foo
{
void Do(IEnumerable<Bar> bars);
Bar[] Bars { get; }
}
für diesen Ansatz Mein Argument ist, dass die Implementierungsklasse ein erstellen Listen Sie direkt von IEnumerable auf und geben Sie es einfach mit List.ToArray() zurück. Einige glauben jedoch, dass IList anstelle eines Arrays zurückgegeben werden sollte. Das Problem, das ich hier habe, ist, dass du es jetzt erneut brauchst, um es mit einer ReadOnlyCollection zu kopieren, bevor du zurückkehrst. Die Option, IEnumerable zurückzugeben, scheint für den Clientcode problematisch zu sein.
Was verwenden/bevorzugen Sie? (besonders in Bezug auf Bibliotheken, die von anderen Entwicklern außerhalb Ihrer Organisation verwendet werden)
Ich habe die Fehler meiner Wege gesehen. Wie viele Zustand unten ist es offensichtlich Entwickler sehen T [] Eigenschaften nicht als Ich glaube, mein Missbrauch von ihnen hat mir einige schlechte Angewohnheiten beigebracht. Ich habe mich nie wirklich darum gekümmert, ob sie das Array modifiziert haben, weil es eine Kopie war. Aber ich habe die Verwirrung, die es hervorruft, erkannt Gewinner –