GetNames()
gibt ein zurück IEnumerable
. Wenn Sie dieses Ergebnis speichern:
IEnumerable foo = GetNames();
Jedes Mal foo
, wenn Sie aufzählen , wird die GetNames()
Methode erneut aufgerufen (nicht wörtlich, ich kann keinen Link finden, der die Details richtig erklärt, aber siehe IEnumerable.GetEnumerator()
).
Resharper sieht dies und schlägt vor, das Ergebnis der Aufzählung GetNames()
in einer lokalen Variablen zu speichern , indem Sie es beispielsweise in einer Liste materialisieren:
IEnumerable fooEnumerated = GetNames().ToList();
Dadurch wird sichergestellt, dass das GetNames()
Ergebnis nur einmal aufgelistet wird, solange Sie sich darauf beziehen fooEnumerated
.
Dies ist wichtig, da Sie normalerweise nur einmal auflisten möchten, z. B. wenn Sie GetNames()
einen (langsamen) Datenbankaufruf ausführen.
Da Sie die Ergebnisse in einer Liste materialisiert haben , spielt es keine Rolle mehr, dass Sie fooEnumerated
zweimal aufzählen . Sie werden zweimal eine In-Memory-Liste durchlaufen.