@Servy Ein Grund für die Verwendung von OrderBy wäre, dass ListaServizi keine Sortiermethode hat, da diese als deklariert ist IList<string>. Dieser Code würde tatsächlich wie geschrieben funktionieren, im Gegensatz zu den Antworten, mit denen mehr positive Stimmen erhalten wurden ListaServizi.Sort(). Ich sage nicht, dass dies die Lösung ist, die ich wählen würde, aber dies war tatsächlich die einzig richtige Antwort, als ich meine Antwort veröffentlichte.
Phoog
Wenn es nicht die Lösung ist, die Sie wählen würden, warum sollten Sie sie dann als Antwort vorschlagen? Schlagen Sie vor, was Sie als Antwort tun würden. Wenn dies bedeutet, dass der Typ von IList in List geändert wird, damit Sie ihn aufrufen .Sortkönnen, warum nicht ?
Servy
1
@Servy Er hat das Problem gelöst, ohne die Problemspezifikation zu ändern. Das ist bei weitem der bevorzugte Weg. Darüber hinaus verwendet die Problemstellung das Schnittstellen-über-Implementierungsmuster, was sehr wichtig ist. Das Vorschlagen der Änderung des Listentyps ist korrekt, sollte jedoch als alternative Antwort nach der richtigen Antwort erfolgen, da das Problem geändert werden muss.
Aurelien Ribon
1
@ AurélienRibon Nichts an der Problemstellung besagt, dass der Typ der Variablen nicht geändert werden kann. Die Anforderungen sind sehr spezifisch zu sortieren List. Und die mit dieser Antwort verbundenen Kosten sind nicht trivial und auch unnötig. Es gewinnt buchstäblich nichts . Es erhöht die Komplexität des Codes, ist weniger präzise, weniger effizient und bietet hier buchstäblich nur Nachteile.
Andere Antworten sind richtig Sort, aber sie scheinen die Tatsache übersehen zu haben, dass der Speicherort als eingegeben ist IList<string. Sortist nicht Teil der Schnittstelle.
Wenn Sie wissen, dass dies ListaServiziimmer ein enthält List<string>, können Sie entweder den deklarierten Typ ändern oder eine Besetzung verwenden. Wenn Sie sich nicht sicher sind, können Sie den Typ testen:
if(typeof(List<string>).IsAssignableFrom(ListaServizi.GetType()))((List<string>)ListaServizi).Sort();else{//... some other solution; there are a few to choose from.}
Vielleicht idiomatischer:
List<string> typeCheck =ListaServiziasList<string>;if(typeCheck !=null)
typeCheck.Sort();else{//... some other solution; there are a few to choose from.}
Wenn Sie wissen, dass dies ListaServizimanchmal eine andere Implementierung von enthält IList<string>, hinterlassen Sie einen Kommentar, und ich füge ein oder zwei Vorschläge zum Sortieren hinzu.
ListaServiziist IList<string>; Die Schnittstelle hat keine SortMethode. Du brauchst hier wenigstens eine Besetzung.
Phoog
3
List<string> myCollection =newList<string>(){"Bob","Bob","Alex","Abdi","Abdi","Bob","Alex","Bob","Abdi"};
myCollection.Sort();foreach(var name in myCollection.Distinct()){Console.WriteLine(name +" "+ myCollection.Count(x=> x == name));}
.Sort
msdn.microsoft.com/en-us/library/b0zbh7b6%28v=vs.90%29.aspx ?Antworten:
quelle
IList<string>
. Dieser Code würde tatsächlich wie geschrieben funktionieren, im Gegensatz zu den Antworten, mit denen mehr positive Stimmen erhalten wurdenListaServizi.Sort()
. Ich sage nicht, dass dies die Lösung ist, die ich wählen würde, aber dies war tatsächlich die einzig richtige Antwort, als ich meine Antwort veröffentlichte..Sort
können, warum nicht ?List
. Und die mit dieser Antwort verbundenen Kosten sind nicht trivial und auch unnötig. Es gewinnt buchstäblich nichts . Es erhöht die Komplexität des Codes, ist weniger präzise, weniger effizient und bietet hier buchstäblich nur Nachteile.Sie können Sortieren verwenden
quelle
Andere Antworten sind richtig
Sort
, aber sie scheinen die Tatsache übersehen zu haben, dass der Speicherort als eingegeben istIList<string
.Sort
ist nicht Teil der Schnittstelle.Wenn Sie wissen, dass dies
ListaServizi
immer ein enthältList<string>
, können Sie entweder den deklarierten Typ ändern oder eine Besetzung verwenden. Wenn Sie sich nicht sicher sind, können Sie den Typ testen:Vielleicht idiomatischer:
Wenn Sie wissen, dass dies
ListaServizi
manchmal eine andere Implementierung von enthältIList<string>
, hinterlassen Sie einen Kommentar, und ich füge ein oder zwei Vorschläge zum Sortieren hinzu.quelle
Werde das für dich tun. Es ist einfach genug mit einer Liste von Zeichenfolgen. Sie müssen etwas schlauer sein, wenn Sie Objekte sortieren.
quelle
ListaServizi
istIList<string>
; Die Schnittstelle hat keineSort
Methode. Du brauchst hier wenigstens eine Besetzung.Ausgabe: Abdi 3 Alex 2 Bob 4
quelle