Mögliche Duplizieren:
Collection<T> versus List<T> what should you use on your interfaces?OK, um eine interne Liste <T> als IEnumerable <T> oder ICollection <T> zurückzugeben?
Betrachten wir diese Methode-der zurückgegebene Variable myVar
ist ein List<T>
, aber die Rückgabetyp der Methode MyMethod()
ist ein IEnumerable<T>
:
public IEnumerable<T> MyMethod(string stuff)
{
var myVar = new List<T>();
//do stuff
return myVar;
}
Im Wesentlichen möchte ich wissen, ob returni ng myVar
als ein anderer Typ ist in Ordnung.
Speziell in Bezug auf meine Situation geht das "Do-Zeug" durch eine DataRow
und ordnet die Objekte in dieser DataRow
einer Liste von Objekten. Ich habe auch ähnliche Situationen mit ICollection
und IList
Rückgabetypen an anderen Orten.
Der Grund, warum ich entweder IEnumerable
oder ICollection
zurückgeben möchte, ist so, dass ich nicht mehr zurückgebe als nötig. Gleichzeitig kann der Aufrufer den zurückgegebenen Wert jedoch in einen List
konvertieren, wenn dies erforderlich ist.
Allerdings scheint es komisch, dass meine Return-Anweisung eine List
zurückgibt, anstatt, was der Rückgabetyp der Methode ist. Ist das normal? Ist etwas falsch daran, dies zu tun?
Klärung (als Reaktion auf die Betrogene Kommentare):
Nur um zu klären, was ich neugierig bin im Begriff ist, ob es in Ordnung ist, dass meine return-Anweisung im Körper ein List<T>
zurückkehrt, aber die Methode Header hat einen Rückgabetyp von IEnumerable
, oder möglicherweise ICollection
, Collection
, etc ... Etwas verschiedene als als Körper zurück Anweisung.
Der Aufrufer sollte nie von IEnumerable zu List konvertieren. Der Grund dafür, dass eine Schnittstelle zurückgegeben wird, ist, dass es keine Rolle spielt, ob es eine zugrunde liegende Liste, eine überlagerbare Sammlung, ein einfaches Array oder sogar eine Liste über die Rendite gibt. – aqwert
Die beiden vorgeschlagenen Betrogenen sind Duplikern näher als diese Frage, denke ich, obwohl sie alle eng miteinander verwandt sind. –
@ChrisCharabaruk Ich stimme zu, dass diese Frage kein Duplikat ist und ich habe sie überarbeitet, um hoffentlich besser zu vermitteln, was ich glaube, dass sie einzigartig ist. Ich habe auch dafür gestimmt, die Frage erneut zu stellen. – DavidRR