Was ist die beste oder interessanteste Erweiterung Methoden die du gesehen hast?
Fange ich an, wirklich zu lieben Erweiterung Methoden... ich Frage mich, ob jemand hat Sie gestoßen, die wirklich blies Ihren Geist, oder einfach nur clever gefunden.
Beispiel schrieb ich heute:
Bearbeitet durch andere Nutzer Kommentare:
public static IEnumerable<int> To(this int fromNumber, int toNumber) {
while (fromNumber < toNumber) {
yield return fromNumber;
fromNumber++;
}
}
Dies ermöglicht eine for-Schleife geschrieben werden, wie eine foreach-Schleife:
foreach (int x in 0.To(16)) {
Console.WriteLine(Math.Pow(2, x).ToString());
}
Ich kann nicht warten, um zu sehen, andere Beispiele! Genießen Sie!
- Ausgezeichnet! Ich Liebe es.
- Ihre Methode ist meist eine Reimplementierung von Enumerable.Range (msdn.microsoft.com/en-us/library/...). Der Unterschied ist die Reichweite nimmt eine start-und eine Zählung, während Ihnen nimmt ab und zu. Deins geht auch gegen normale bounding-Praxis (<), indem Sie die high-end - (<=). Schließlich kann es nach hinten Los geht, aber das ist selten in der Praxis notwendig.
- +1 Hmm, ich wusste nicht, dass das existierte, danke für den link! Du hast Recht über die bounding... das war nur ein Beispiel ich warf zusammen in ein paar Minuten - die zweite, die Sie versuchen zu tun, "0.Zu(myList.Count)" erhalten Sie eine Ausnahme.
- Geht gegen normale bounding pratcice? Unsinn. "0 16" ist immer inclusive in speec und Konzept. In for-Schleifen, ist es normal zu benutzen, max+1 als die Zahl in dem Zustand, einfach deshalb, weil die Indizes in einer 5-item-Liste gehen 0...4 und es ist sinnvoller zu schauen, "< "5" als "<= 4".
- Lesen Sie hier: stackoverflow.com/questions/271398/...
- haha. fast vb.net syntax erstellt mit einer Erweiterung Methode...
- Ich denke
for(int x=0; x<=16; ++x)
mehr lesbar für erfahrene Programmierer. Aber, abgeschlossene Intervalle sind eher selten. - Es ist Fragen wie diese, die machen mir den Wunsch, mehr zu schreiben C#...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die vollständige Lösung ist zu groß, hier zu setzen, aber ich schrieb eine Reihe von extension-Methoden, die Ihnen erlauben würde, leicht umwandeln eine DataTable in eine CSV-Datei.
Am Ende des Tages, man könnte es so nennen:
Dies ist eine, die seit einigen spielen von mir in letzter Zeit:
Verwendet wie:
Memento ist ein handliches Klasse:
Zu vervollständigen und den Abhängigkeiten:
Ich bin kein fan von der
INotifyPropertyChanged
Schnittstelle erfordert, dass Immobilien, die Namen werden als strings übergeben. Ich möchte eine stark typisierte Weg zum check zur compile-Zeit, ich bin nur zur Sensibilisierung und Umgang mit Eigentum änderungen für Eigenschaften, die es gibt. Ich benutze diesen code:In Klassen, implementieren
INotifyPropertyChanged
ich diese Helfer-Methode:So, dass ich endlich tun können diese Art der Sache:
Es ist stark typisiert und ich habe nur Ereignisse für Eigenschaften, die eigentlich Ihren Wert ändern.
private static readonly PropertyChangedEventArgs _namePropertyChangedEventArgs = new PropertyChangedEventArgs("Name");
, und leitet diese anOnPropertyChanged
. Viel einfacher zu verfolgen als strings (finden aller Referenzen), und viel billiger auf memory (nur einmal erstellt pro Typ statt einmal pro änderung pro Instanz).Gut, das ist nicht gerade klug, aber ich habe geändert ----OrDefault Methoden, damit könnten Sie ein Standard-Element der inline-anstelle der überprüfung von null-später im code:
Seine unglaublich einfachen, aber hilft wirklich sauber, die null-Prüfungen. Am besten, wenn das UI erwartet eine Liste von X Elementen, wie ein Turnier-system, oder Spieler, slots und Sie möchten die Anzeige "freie Plätze".
Verwendung:
Hier habe ich gehackt zusammen, so fühlen sich frei zu wählen, Löcher in Sie. Es dauert eine (geordnete) Liste von Integer-zahlen und gibt eine Liste von strings, die zusammenhängende Bereiche. eg:
Die Funktion (innerhalb einer statischen Klasse):
Beispiel:
Dieser code wird verwendet zum konvertieren von Daten aus einer DailyWTF-würdig Fahrplan-Anwendung. WeekPattern ist eine Bitmaske gespeichert in einem string "0011011100...". WeekPatternToInts() konvertiert, dass ein IEnumerable<int>, in diesem Fall [3,4,6,7,8], das wird "3-4,6-8". Es bietet dem Anwender eine kompakte Beschreibung der akademischen Woche reicht, einen Vortrag tritt auf.
Zwei, die ich gerne nutze, sind die InsertWhere
<T
> und RemoveWhere<T
> Extension-Methods, die ich geschrieben habe. Arbeiten mit ObservableCollections in WPF und Silverlight habe ich oft anpassen müssen, um geordnete Listen ohne neu zu Ihnen. Diese Methoden erlauben, mich zu entfernen und einfügen nach einem mitgelieferten Func, so .OrderBy() nicht erneut aufgerufen.Edit:
Talljoe einige bedeutende Verbesserungen an der RemoveWhere/RemoveAll, dass ich hatte, hastig konstruiert. Mit ~3mill Artikel entfernen jede Dritte der neuen version nimmt nur ~50 Millisekunden (weniger als 10 wenn Sie können call-Liste.RemoveAll !) im Gegensatz zu den RemoveWhere 's mehrere Sekunden (ich habe es Leid zu warten, für es.)
Hier ist seine stark verbesserte version, nochmals vielen Dank!
Habe ich verschiedene
.Debugify
Erweiterung-Methoden, die nützlich sind für das wegwerfen von Objekten in einer log-Datei. Zum Beispiel, hier ist mein Wörterbuch debugify (ich habe diese Liste, Datatable, param array, etc.):Und hier ist eine für eine DbParameterCollection (nützlich für dumping-Datenbank Aufrufe der log-Datei):
Beispiel Ergebnis:
Beachten Sie, dass, wenn Sie nennen diese nach deine DB-Aufrufe, erhalten Sie die Ausgabe-Parameter ausgefüllt, auch. Ich nenne dies auf eine Zeile, schließt die SP-Namen, so kann ich kopieren/einfügen der call-in-SSMS für die Fehlersuche.
Diesen machen mein log-Dateien Recht und einfach zu generieren, ohne Unterbrechung mein code.
Einem paar extension-Methoden zum konvertieren von Basis-36 Saiten(!) Ganzzahlen:
(Einige Genies beschlossen, dass der beste Weg, um das speichern von Rufnummern in die Datenbank war, um Sie zu Kodieren strings. Dezimalzahlen nehmen zu viel Platz. Hex ist besser, aber nicht verwenden Sie die Zeichen, die G-Z. So offensichtlich verlängern base 16 base-36!)
Schrieb ich eine Reihe von extension-Methoden, um es leichter zu manipulieren ADO.NET Gegenstände und Methoden :
Erstellen Sie ein DbCommand von einem DbConnection in einer Anweisung :
Hinzufügen eines Parameters zu einem DbCommand :
Zugang DbDataReader-Felder nach Namen statt index :
Einem anderen (nicht verwandten) Erweiterung Methode, die mir erlaubt, führen Sie die DragMove-Betrieb (wie in WPF) auf WinForms Formulare und Steuerelemente, siehe hier.
Meisten Beispiele für extension-Methoden, die ich sehe, hier gehen Sie gegen die besten Praktiken.
Extension-Methoden sind mächtig, aber sollte sparsam verwendet werden. In meiner Erfahrung, eine statische helper/utility-Klasse mit old-school-syntax werden im Allgemeinen vorzuziehen, für die meisten dieser.
Es gibt etwas zu sagen für extension-Methoden für die Enums, da es nicht möglich für Sie ist haben Methoden. Wenn Sie die Definition im gleichen namespace wie dein Enum und in der gleichen assembly, Sie arbeiten transparent.
Zwar sehr einfach, ich finde dieses hier besonders nützlich sein, da ich eine Seite aus einem vollständigen Ergebnissatz zehn Milliarden mal ein Projekt:
return query.Skip((pageNumber - 1) * pageSize).Take(pageSize)
. Nur eine Frage des Geschmacks..Häufig Zeiten, die ich brauchte, um die Anzeige Benutzer-freundlich-Wert basiert auf einem Enum-Wert, aber nicht wollen, zu gehen, den das benutzerdefinierte Attribut Weg, wie es schien nicht allzu elegant.
Mit dieser praktischen Erweiterung Methode:
Kann ich dies tun:
Yay!
Dies ist eine Erweiterung Methode zum zentralisieren von null überprüft, bevor auslösen von Ereignissen.
Dieser ist unglaublich einfach, aber es ist eine Prüfung, die ich tun eine Menge, damit ich endete damit eine Erweiterung Methode für Sie. Meine Lieblings-Erweiterung Methoden neigen dazu, die wirklich sehr einfach, einfach wie diese, oder wie Taylor L Erweiterung Methode für das auslösen von Ereignissen.
IEnumerable
stattICollection
Damit mehr funktionale combinator-code:
Dann könnte ich etwas schreiben wie dieses:
Einem anderen set verwende ich sehr oft für Koaleszenz-IDictionary Methoden:
Und für die Arbeit mit Sammlungen im Allgemeinen:
Dann für baumartige Strukturen:
Kann ich dann also einfach Durchlaufen und arbeiten auf eine Klasse wie:
Weiter zu erleichtern, Funktion, Zusammensetzung und ein mehr F# - wie Art und Weise der Programmierung in C#:
Ich bin zum umwandeln einer Menge von Java zu C#. Viele der Methoden unterscheiden sich nur in der Kapitalisierung oder andere kleine syntax-Unterschiede. Also Java-code wie
wird nicht kompiliert, aber durch das hinzufügen einer Erweiterung Methode
Kann ich fangen alle Methoden (und ich nehme an, ein guter compiler inline das überhaupt?).
Es ist sicherlich die Aufgabe viel einfacher und zuverlässiger.
(Ich danke @Yuriy - siehe Antwort in: Unterschiede zwischen den StringBuilder in Java und C#) für die Anregung.
Ich mag diese eine. Es ist eine variation auf den String.Split-Methode, die ermöglicht die Verwendung von escape-Zeichen zu unterdrücken, Spaltung, wenn die split-Charakter soll in der aktuellen Zeichenfolge.
Erweiterung Methode auf int zu Dekodieren, die eine Bitmaske Tage angeben (mit dem ersten Tag der Woche als Montag in diesem Fall) eine enumeration DayOfWeek-enums:
Diese schafft array mit dem einzigen element Hinzugefügt, ganz am Anfang:
Und dieser hilft mir, wenn ich brauche, um zu konvertieren, irgendeinen Ausdruck auf, es ist square:
Hier ist noch eins, ich schrieb:
Die motivation dahinter war einfach. Es ist immer nervte mich, wie die integrierten in der Substring-Methode nahm startindex und Länge, wie es die Parameter. Es ist IMMER viel hilfreicher zu tun startindex und endindex. So, ich rollte meinen eigenen:
Verwendung:
Dem Grund musste ich Subsetstring war, weil Substring s überlast nimmt schon zwei ints. Wenn jemand einen besseren Namen, bitte, lassen Sie mich wissen,!!
cool, auch lieben Extensions!
hier ein paar.
Dieser wird das Letzte Datum des Monats:
diese beiden machen die Reflexion ein bisschen einfacher:
Die Verlängerung Methoden, die ich am häufigsten verwenden würde, diejenigen zu sein, in der
System.Linq -.Zählbare
Klasse.Sowie eine gute und nützliche Erweiterung, die Liste finden Sie in MoreLinq.
Gibt es ein paar, die ich erwähnt habe, dass ich hier verwenden:
Einfacher Prüfung auf enums flags
if( enumVar.IsSet( MyEnum.PossibleFlag ) ) //..then
Inline-Prüfung von null-Werten
myObject.IfNotNull( x => x.Property );
paar Erweiterungen verwende ich meistens. erste Satz ist Objekt-Erweiterungen, die wirklich nur für die Umwandlung.
string Erweiterungen
und letzten ist einige enum-Erweiterungen
Mit der regelmäßigen Verwendung von StringBuilder, können Sie sehen die Notwendigkeit der Bündelung der AppendFormat() und AppendLine().
Auch, da ich die Umwandlung eine Anwendung von VB6 nach C#, die folgenden sind sehr nützlich für mich:
Meiner Favoriten aus meiner persönlichen Sammlung von string-utils ist eine, die analysiert eine stark typisierte Wert aus einem string für jeden Typ, hat eine TryParse-Methode:
Es ist ideal für stark typisierte Informationen von query-strings:
Ich hasse es, dies zu tun, überall:
Stattdessen habe ich in der Regel verwenden Sie die folgenden Extension Methode:
Also das erste Beispiel wird dann:
Yay, Erweiterung Methoden!
String.format sollte nicht statisch. Also ich benutze eine extension-Methode genannt frmt:
Wenn ich will, zu Lesen oder zu schreiben eine Zahl in ein byte-stream ohne die Konstruktion einer Binär-Autor (technisch sind Sie nicht modifizieren soll der raw-stream, nachdem Sie umwickelt habe es mit einem Schreiber):
Diese eine Verschiebungen einer Sequenz, so dass Sie die Aufgabe zuerst. Ich benutzte es zum Beispiel zu nehmen, der Tag der Wochen, und verschieben Sie Sie so, dass der erste Tag in der Sequenz ist der erste Tag der Woche für die aktuelle Kultur.
Ich autopilot die folgende zu lösen, den class-name-zu-groß-groß-url problem in MVC-Projekte:
Verwendung:
Hier eine, von der ich schrieb neulich bei der Arbeit und darüber gebloggt:
http://crazorsharp.blogspot.com/2009/03/cool-ienumberable-extension-method_25.html
Es ist im Grunde IEnumerable.ToHtmlTable();
Je gearbeitet Entity Framework & verwendet eine Zeile code ähnlich wie diese mehr und mehr?
Ist es nicht einfacher, dies zu tun:
`
Ich schlage vor, Sie speichern die property-Namen in consts zu vermeiden, mit Reflexion & mehr agasin.
Vergleichen jede angegebene Eigenschaft des angegebenen fileinfo-Klasse gegen eine andere..
Dies ist etwas, was ich oft für das kopieren von einem stream in einen anderen stream, vor allem für das kopieren von Zeugs in einen MemoryStream.
Umsetzung:
In multi-threaded-WPF-Anwendungen (zum Beispiel, wenn Sie über Steckdosen oder Zeitschaltuhren) ich habe oft aufrufen der GUI-thread zu ändern WPF-Element-Attribute. Das ist hässlich aufgeblähten code, vor allem, da Sie es tun müssen für jede Methode. Das ist, warum ich diese extension-Methode:
Umsetzung:
Ich würde wahrscheinlich verwenden die meisten für die eingeschränkte Typen.
Etwas wie:
Einige davon wurden bereits gepostet, aber ich wollte nur sagen, dass ich eine Reihe von diese threads und die Stimmen nie mit der Realität überein, was nützlich ist. IMO, dies ist die Liste der wirklich die meisten nützliche Erweiterung Methoden
Dies ist sehr nützlich, denn es ersetzt das eingebaute foreach-Anweisung, und wir alle wissen, wie oft das genutzt wird.
Nur dieses erzeugt eine Sequenz von 0 bis 6. Es können auch andere Versionen wie die Angabe Ausgangspunkt und Schritt. Dies ist die zweite die meisten nützliche Funktion, denn Sie ersetzt die for-Schleife. Einige Leute haben gesagt, dass diese Duplikate die Durchlaufen werden.Range-Funktion, die wahr ist, aber eines der Dinge, die ich gerne mit linq ist die von Links nach rechts, die Bestellung, so können Sie so etwas tun
Den nächsten am nützlichsten ist das CastTo und Wie. Wieder duplizieren eingebaute Funktionen, aber Sie erhalten die von Links nach rechts bestellen. Beachten Sie, dass CastTo ist anders zu wirken, dass CastTo arbeitet auf ein einzelnes Objekt.
Dann gibt es die SplitAsEnumerable. Dies funktioniert genauso wie bei split, aber laden nicht alles gleichzeitig in den Speicher. Dies ist ideal für die Analyse von großen Dateien. Es funktioniert auf einen string oder einen Datenstrom.
Dem letzten Weg zu drehen, eine Sammlung in einen string. Dies ist ideal für die Anzeige von Sachen auf dem Bildschirm oder schreiben von Dateien. eg:
Während ich nicht schreiben diese beiden - ich wünschte, ich hätte. Gefunden auf http://lostechies.com/jimmybogard/2009/10/16/more-missing-linq-operators/
Anhängen
Voranstellen