Rein, Bequemlichkeit ... Sie wissen nicht, wie viel Zustand Sie gehen zu müssen, bei der Definition, zum Beispiel ein Predicate<T>
- betrachten:
List<int> data = new List<int> {1,2,3,4,5,6,7,8,9,10};
int min = int.Parse(Console.ReadLine()), max = int.Parse(Console.ReadLine());
List<int> filtered = data.FindAll(i => i >= min && i <= max);
hier haben wir bestanden zwei zusätzliche Bits Zustand in Predicate<T>
(min
und max
) - aber wir können List<T>.FindAll(Predicate<T>)
nicht darüber wissen, da dies ein Anrufer Detail ist.
Die Alternative besteht darin, die Klassen selbst zu schreiben, aber das ist schwer, auch wenn wir faul sind:
class Finder {
public int min, max;
public bool CheckItem(int i) { return i >= min && i <= max;}
}
...
Finder finder = new Finder();
finder.min = int.Parse(Console.ReadLine());
finder.max = int.Parse(Console.ReadLine());
List<int> filtered = data.FindAll(finder.CheckItem);
ich über Sie weiß es nicht, aber ich ziehe es die Version mit der Schließung ... besonders wenn man bedenkt, wie komplex es wird, wenn man mehrere kontextabhängige Ebenen hat. Ich möchte, dass der Compiler sich darum sorgt.
Überlegen Sie auch, wie oft Sie solche Konstrukte verwenden, vor allem für Dinge wie LINQ: Sie würde nicht haben wollen es andere Art und Weise zu tun ...
Ausgezeichnet und gut argumentiert; Danke! –