Wie funktioniert anonyme Funktionen als Argumente für Methoden, aber nicht in Konstruktorargumente?SortedSet <T> und anonymer IComparer <T> im Konstruktor funktioniert nicht
Wenn ich ein List<string>
schaffen, hat es eine Sort-Methode mit folgenden Signatur:
public void Sort(IComparer<T> comparer)
, wo die folgenden Werke:
List<string> list = new List<string>();
list.Sort((a,b) => a.CompareTo(b));
SortedSet einen Konstruktor mit einer ähnlichen Signatur :
public SortedSet(IComparer<T> comparer)
Dies schlägt jedoch fehl, wenn eine anonyme Funktion im Konstruktor verwendet wird. Das Folgende ist nicht gültig:
SortedSet<string> set = new SortedSet<string>((a, b) => a.CompareTo(b));
Erstellen einer Sortierklasse funktioniert wie erwartet fein:
public class MyComparer : IComparer<string>
{
public int Compare(string a, string b)
{ return a.CompareTo(b); }
}
SortedSet<string> set = new SortedSet<string>(new MyComparer());
Danke für die Erklärung und Wrapper-Code. Ich sehe jetzt, dass ich den Vergleich und nicht IComparere on sort. –