2016-05-24 1 views
0

Ich versuche, den Maximalwert aus einer Liste von Doppelpunkten zu erhalten, die unter einem bestimmten Eingabewert liegen. Code:So erhalten Sie den maximalen Wert aus der Liste der Doubles, die kleiner als ein Eingabewert sind mit IEnumerable.Max Erweiterungen

List<double> tmpList = new List<double> { 1.2d, 2.8d, 3.4d, 0.4d, 6.3d }; 
double inputValue = 3.1d; 
int countOfValuesBelowInput = tmpList.Count(z => z < inputValue); // this works 
double maxBelowInput = tmpList.Max(z => z < inputValue); // compile error 

ich einen Compiler-Fehler in der letzten Zeile - sagen: „Kann nicht implizit Bool konvertieren zu verdoppeln“. Was mache ich nicht richtig? Schätzen Sie jede Hilfe und entschuldigen Sie, wenn dies ein Duplikat ist - mein Bestes versucht, Google.

+0

Versuchen Sie 'tmpList.Where (z => z

Antwort

2

Sie können die Liste filtern, indem Where verwenden, bevor Sie die maximale wie folgt nehmen:

double maxBelowInput = tmpList.Where(z => z < inputValue).Max(); 

Der Grund, warum Ihre aktuellen Code nicht funktioniert, ist, dass die Überlastung von Max Sie verwenden einen Wähler erwartet, kein Prädikat.

Ein Selektor ist eine Funktion, die das Element übernimmt und einen zugehörigen Wert ausgibt, normalerweise eine Eigenschaft des Elements. Wenn die Liste beispielsweise den Typ Person aufweist, können Sie das maximale Alter der Personen mithilfe von .Max(x => x.Age) ermitteln. Hier sind Sie Wählen Sie etwas aus jedem Element.

Auf der anderen Seite, Count nimmt ein Prädikat, das ist im Grunde ein Filter. Es ist eine Funktion, die den Artikel übernimmt und entweder true oder false zurückgibt.

+0

Vielen Dank! Das war sehr hilfreich. – user1809292

Verwandte Themen