Ich habe eine benutzerdefinierte Unterklasse von BindingList <T>, die ich eine LINQ-Abfrage über die praktischen Erweiterungsmethoden ausführen möchten. Zum Beispiel:Wie kann ich IEnumerable <T> Erweiterungs-Methoden auf meiner benutzerdefinierten Unterklasse BindingList <T> zugreifen?
public int GetSum(MyList<T> list)
{
return list.Sum(x => x.Value);
}
Aber der Compiler beschwert sich, dass es nicht Sum
auflösen kann, weil es nicht list
als IEnumerable<T>
zu erkennen ist, ist es, die offensichtlich ist, denn dies funktioniert:
public int GetSum(MyList<T> list)
{
return ((IEnumerable<T>)list).Sum(x => x.Value);
}
Jedermann haben Auf geschickte Weise kann ich die hässliche und unnötige Besetzung vermeiden?
Das muss es sein ... glaubst du, das liegt daran, dass es mehrere IEnumerable Implementierungen auf dem Typ gibt? –
Dan
@Dan Innerhalb Ihrer Summe (x => x.Value) entfernt x.Value die Fähigkeit, die dieser Ausdruck in etwas über alle Objekte auswerten kann; Sie geben jetzt einen Typ an, der eine Eigenschaft von Value haben muss, um richtig ausgewertet zu werden. Wenn Sie den Typ nicht innerhalb des type-Arguments der Sum-Erweiterungsmethode angeben, hat er keine Idee, wie der Ausdruck auszuwerten ist. –