Lassen Sie uns eine Liste mit Antworten erstellen, in der Sie Ihre hervorragenden und bevorzugten Erweiterungsmethoden veröffentlichen .
Voraussetzung ist, dass der vollständige Code sowie ein Beispiel und eine Erläuterung zur Verwendung veröffentlicht werden.
Aufgrund des großen Interesses an diesem Thema habe ich ein Open Source-Projekt namens extensionoverflow auf Codeplex eingerichtet .
Bitte markieren Sie Ihre Antworten mit einer Annahme, um den Code in das Codeplex-Projekt einzufügen.
Bitte posten Sie den vollständigen Quellcode und keinen Link.
Codeplex News:
24.08.2010 Die Codeplex-Seite ist jetzt hier: http://extensionoverflow.codeplex.com/
11.11.2008 XmlSerialize / XmlDeserialize ist jetzt implementiert und Unit Tested .
11.11.2008 Es ist noch Platz für weitere Entwickler. ;-) JETZT mitmachen !
11.11.2008 Dritter Mitwirkender bei ExtensionOverflow , willkommen bei BKristensen
11.11.2008 FormatWith ist jetzt implementiert und Unit Tested .
09.11.2008 Zweiter Mitwirkender ist ExtensionOverflow beigetreten . Willkommen bei Chakrit .
09.11.2008 Wir brauchen mehr Entwickler. ;-);
09.11.2008 ThrowIfArgumentIsNull in jetzt implementiert und als Einheit getestet auf Codeplex.
quelle
Antworten:
Erlaubt mir zu ersetzen:
Mit:
quelle
In
, aber vielleichtIsIn
wäre es besser.In<T>(...)
auch daran und fand es die nützlichste Erweiterungsmethode außerhalb der Standardbibliothek. Aber ich bin im Widerspruch zum NamenIn
. Ein Methodenname soll beschreiben, was er tut,In
tut dies aber nicht. Ich habe es genanntIsAnyOf<T>(...)
, aber ich denke, esIsIn<T>(...)
wäre auch angemessen.Ich habe verschiedene Erweiterungsmethoden in meinem MiscUtil- Projekt (die vollständige Quelle ist dort verfügbar - ich werde sie hier nicht wiederholen). Meine Favoriten, von denen einige andere Klassen betreffen (z. B. Bereiche):
Datum und Uhrzeit - hauptsächlich für Unit-Tests. Ich bin mir nicht sicher, ob ich sie in der Produktion verwenden würde :)
Reichweiten und Treten - ein großes Dankeschön an Marc Gravell für seine Bedienerarbeit , die dies ermöglicht hat:
Vergleiche:
Argumentprüfung:
LINQ to XML wird auf anonyme Typen (oder andere Typen mit entsprechenden Eigenschaften) angewendet:
Push LINQ - würde zu lange dauern, um hier zu erklären, aber suchen Sie danach.
quelle
string.Format-Verknüpfung:
Beispiel:
Zum schnellen Kopieren und Einfügen klicken Sie hier .
Finden Sie es nicht natürlicher,
"some string".F("param")
statt zu tippen?string.Format("some string", "param")
?Versuchen Sie einen der folgenden Vorschläge, um einen besser lesbaren Namen zu erhalten:
..
quelle
Sind diese von Nutzen?
quelle
OneOf
sollten zu akzeptieren , jedeIList<T>
. Dann könnten Sie immer auch eine Überladung haben, die einparams
Argument nimmt und dieses einfach in dieIList<T>
Überladung übergibt . Ich gab eine Antwort (ganz unten im Moment) mit einerNextBool
ähnlichen Methode wie IhrerCoinToss
, aber mit einer Überladung, die einenprobability
Parameter benötigt (was ist, wenn 75% der Zeit etwas passieren soll?). Außerdem nur eine Kleinigkeit: Ihr Beispielcode löst einNullReferenceException
Da aus,rand
das niemals initialisiert wird.CoinToss
, mit implementiert zu werden,rng.NextDouble() < .5
weil intern.Next(int)
mit gemacht wird,.NextDouble()
so dass Sie eine Besetzung, ein * und einen Scheck speichern würden.Beispiel:
quelle
Die Erweiterungsmethode:
Die Methode gilt für alle Typen und ermöglicht das Hinzufügen einer Reihe von Elementen zu einer Liste als Parameter.
Beispiel:
quelle
var list = new List<int>{5,4,8,4,2};
ICollection<T>
; dann könnte es zum Beispiel auch fürLinkedList<T>
undHashSet<T>
nicht nur für indizierte Sammlungen verwendet werden.Setzen Sie dies auf jeden Fall in das Codeplex-Projekt ein.
Objekte in XML serialisieren / deserialisieren:
quelle
ToXml()
(wieToString()
)ForEach for IEnumerables
Naives Beispiel:
Cooles Beispiel:
Hinweis:
Dies ist nicht so,
Select
weilSelect
erwartet wird, dass Ihre Funktion etwas zurückgibt, um es in eine andere Liste umzuwandeln.Mit ForEach können Sie einfach für jedes Element etwas ausführen, ohne Transformationen / Datenmanipulationen durchführen zu müssen.
Ich habe dies gemacht, damit ich in einem funktionaleren Stil programmieren kann, und ich war überrascht, dass List einen ForEach hat, IEnumerable jedoch nicht.
Fügen Sie dies in das Codeplex-Projekt ein
quelle
Meine Konvertierungserweiterungen, mit denen Sie Folgendes tun können:
Hier ist es, wie auf TheSoftwareJedi.com veröffentlicht
Sie können bei einem Fehler nach der Standardeinstellung fragen (ruft den leeren Konstruktor oder "0" für Zahlen auf), einen "Standard" -Wert angeben (ich nenne ihn "andere") oder nach null fragen (wobei T: class). Ich habe auch sowohl stille Ausnahmemodelle als auch ein typisches TryParse-Modell bereitgestellt, das einen Bool zurückgibt, der die ausgeführte Aktion angibt, und ein out-Parameter enthält den neuen Wert. Unser Code kann also solche Dinge tun
Ich konnte Nullable-Typen nicht dazu bringen, sehr sauber in das Ganze zu rollen. Ich habe es ungefähr 20 Minuten lang versucht, bevor ich das Handtuch geworfen habe.
quelle
ToOrNull
hat genau das gleiche Verhalten wieToOrDefault
(dh wenn SieToOrDefault
einen Referenztyp mit einer erfolglosen Konvertierung aufrufen , wird er zurückgegebennull
). Aber was noch wichtiger ist, es scheint mir irgendwie überflüssig zu sein, da esvar s = myObject as string
dasselbe erreicht wievar s = myObject.ToOrNull<string>()
- aber ohne möglicherweise einen fangen zu müssenInvalidCastException
. Vermisse ich etwasIch habe eine Erweiterungsmethode zum Protokollieren von Ausnahmen:
Und es wird so verwendet:
[Entschuldigung für die zweimalige Veröffentlichung; der 2. ist besser gestaltet :-)]
quelle
Nützlich, um eine Zeichenfolge in eine Aufzählung zu analysieren.
Kredit geht an Scott Dorman
--- Für Codeplex-Projekt bearbeiten ---
Ich habe Scott Dorman gefragt, ob es ihm etwas ausmachen würde, wenn wir seinen Code im Codeplex-Projekt veröffentlichen. Dies ist die Antwort, die ich von ihm bekommen habe:
quelle
Ich finde das ziemlich nützlich:
Sie können es auf CodePlex verwenden.
quelle
DateTimeExtensions
Beispiele:
quelle
gitorious.org/cadenza ist eine vollständige Bibliothek mit einigen der nützlichsten Erweiterungsmethoden, die ich gesehen habe.
quelle
Hier ist eine, die ich häufig für die Formatierung von Präsentationen verwende.
quelle
Hier ist ein Hin und Her für römische Ziffern. Nicht oft verwendet, könnte aber praktisch sein. Verwendungszweck:
Die Quelle:
quelle
Ein bequemer Weg, um mit Größen umzugehen:
quelle
Für Winform Controls:
IsDesignTime Verwendung:
SetDropdownWidth Verwendung:
Ich habe vergessen zu erwähnen, zögern Sie nicht, diese auf Codeplex zu verwenden ...
quelle
Das ThrowIfArgumentIsNull ist eine gute Möglichkeit, diese Nullprüfung durchzuführen, die wir alle durchführen sollten.
Im Folgenden finden Sie die Verwendung und es funktioniert für alle Klassen in Ihrem Namespace oder überall dort, wo Sie den Namespace verwenden.
Es ist in Ordnung, diesen Code im CodePlex- Projekt zu verwenden.
quelle
default(T)
und die Klassenanforderung entfernen.Require.ThatArgument(input != null)
oderRequire.ThatArgument(personId > 0)
. Es braucht nicht viel mehr Code, es ist viel flexibler und es liest sich gut. Ich habe zusätzliche Überschreibungen, die Funktionen benötigen, wenn Sie die Fehlermeldung oder die Ausnahme selbst anpassen möchten.Ich vermisse die With-Anweisung von Visual Basic, wenn ich zu C # wechsle.
Und so verwenden Sie es in C #:
Spart viel Tipparbeit!
Vergleichen Sie dies mit:
Codeplex-Projekt einfügen
quelle
Nimmt ein camelCaseWord oder PascalCaseWord und "formuliert" es, dh camelCaseWord => camel Case Word
Ich benutze es oft in Verbindung mit Capitalize
Anwendungsbeispiel
Kostenlose Verwendung in Codeplex-Projekten
quelle
Ich fand das hilfreich
Dadurch wird die Nullprüfung im aufrufenden Code entfernt. Du könntest es jetzt tun
quelle
Konvertieren Sie ein Double in einen String, der mit der angegebenen Kultur formatiert wurde:
Beispiel:
quelle
Unten finden Sie eine Erweiterungsmethode, die den Code von Rick Strahl anpasst (und auch die Kommentare) , damit Sie bei jeder Konvertierung in eine Zeichenfolge nicht mehr die Bytereihenfolge eines Bytearrays oder einer Textdatei erraten oder lesen müssen.
Mit dem Snippet können Sie einfach Folgendes tun:
Wenn Sie Fehler finden, fügen Sie diese bitte zu den Kommentaren hinzu. Fühlen Sie sich frei, es in das Codeplex-Projekt aufzunehmen.
quelle
Hier ist eine, die ich heute erstellt habe.
Damit können Sie Folgendes tun:
Das ist fließender und (IMO) leichter zu lesen als dies:
quelle
thingy.NullOr(t => t.Count)
, woCount
ist ein Int? Sie solltendefault(TReturn)
statt null zurückgeben, auf diese Weise benötigen Sie dieclass
Einschränkung nicht und sie funktioniert auch für WerttypenTReturn elseValue = default(TReturn)
ist nur für .NET 4.0 verfügbar? Ich habe 3.5 SP1 und ich habe dieses Konstrukt noch nie gesehen (mein Compiler auch nicht). Ich habe dies nur in die Methode verschoben. Ein Problem ist jedoch, dass das Boxen eines nullbaren Typs in ein Objekt zur Verwendung mit der Methode ein unerwartetes Ergebnis liefert (0 gegenüber erwarteter Null).default(T)
Schlüsselwort ist seit VS2005 vorhanden, aber ich denke, Standardparameter sind eine neue .NET 4-Funktion. Der einfache Weg, dies zu umgehen, sollte darin bestehen, zwei Varianten zu haben, eine, die den Parameter übernimmt, und eine, die dies nicht tut. Ich werde die Antwort so aktualisieren, dass sie CLR 2.0-kompatibel ist. In Bezug auf das Boxen - das ist der Punkt vondefault
. Es handelt sich um 0-initialisierte Daten für einen Werttyp und null für alle Referenztypen. Eine TReturn eines Wertetyps sollte während der gesamten Funktion nicht in der Box bleiben.x.Value
die Rückgabe null zurückgeben sollte (wenn zum Beispielint?
null war) oder den Wert, wenn erint?
einen Wert hat. Es ist ein seltsamer Fall,0
wenn zurückgegebenint? x = null
wird, wenn es übergeben und an das Objekt verpackt wird. Ich habe ähnliche Überprüfungen für nullfähige Typen in Bibliotheken wie fließend nhibernate und linfu (glaube ich) für diesen speziellen Fall gesehen, sodass Sie die Klassenbeschränkung wie zuvor vorgeschlagen aufheben können."Bitte markieren Sie Ihre Antworten mit einer Annahme, um den Code in das Codeplex-Projekt einzufügen."
Warum? Alle Sachen auf dieser Seite unter CC-by-sa-2.5 . Stellen Sie Ihr Erweiterungsüberlaufprojekt also einfach unter dieselbe Lizenz, und Sie können es frei verwenden.
Wie auch immer, hier ist eine String.Reverse-Funktion, die auf dieser Frage basiert .
quelle
Ich hatte es satt, mühsam Null zu überprüfen, während ich Werte aus MySqlDataReader zog, also:
Dies kann natürlich mit jedem SqlDataReader verwendet werden.
Sowohl Hangy als auch Joe hatten einige gute Kommentare dazu, und ich hatte seitdem die Gelegenheit, etwas Ähnliches in einem anderen Kontext zu implementieren. Hier ist eine andere Version:
quelle
as
Schlüsselwort verwenden können, um einen Wert von einem Reader abzurufen, der null zulässt. Wenn Sie den Null-Koaleszenzoperator??
mit dem as-Operator kombinieren , können Sie sogar einen Standardwert ungleich Null haben, um direkt zu einem Werttyp zu wechseln. Siehe stackoverflow.com/questions/746767/…Es hat mich irritiert, dass LINQ mir ein OrderBy gibt, das eine Klasse verwendet, die IComparer als Argument implementiert, aber die Übergabe einer einfachen anonymen Vergleichsfunktion nicht unterstützt. Ich habe das korrigiert.
Diese Klasse erstellt einen IComparer aus Ihrer Vergleichsfunktion ...
... und diese Erweiterungsmethoden legen meine neuen OrderBy-Überladungen für Enumerables offen. Ich bezweifle, dass dies für LINQ to SQL funktioniert, aber es ist großartig für LINQ to Objects.
Sie können dies gerne auf Codeplex setzen, wenn Sie möchten.
quelle
Dieser ist für MVC gedacht und bietet die Möglichkeit
<label />
, derHtml
Variablen, die in jedem Variablen verfügbar ist , ein Tag zu generierenViewPage
. Hoffentlich wird es für andere von Nutzen sein, die versuchen, ähnliche Erweiterungen zu entwickeln.Verwenden:
Ausgabe:
Code:
quelle
Drehen Sie dies:
... das sehr gut finden:
... mit dieser Erweiterungsmethode:
Weitere ADO.NET-Erweiterungsmethoden: DbExtensions
quelle