Faisons une liste de réponses où vous postez vos excellentes méthodes d'extension préférées .
L'exigence est que le code complet doit être publié et un exemple et une explication sur la façon de l'utiliser.
Sur la base du grand intérêt pour ce sujet, j'ai configuré un projet Open Source appelé extensionoverflow sur Codeplex .
Veuillez marquer vos réponses avec une acceptation pour mettre le code dans le projet Codeplex.
Veuillez publier le code source complet et non un lien.
Actualités Codeplex:
24.08.2010 La page Codeplex est maintenant ici: http://extensionoverflow.codeplex.com/
11.11.2008 XmlSerialize / XmlDeserialize est maintenant implémenté et testé unitaire .
11.11.2008 Il y a encore de la place pour plus de développeurs. ;-) Rejoignez-nous MAINTENANT!
11.11.2008 Un troisième contributeur rejoint ExtensionOverflow , bienvenue à BKristensen
11.11.2008 FormatWith est maintenant implémenté et testé à l'unité .
09.11.2008 Le deuxième contributeur a rejoint ExtensionOverflow . bienvenue sur chakrit .
09.11.2008 Nous avons besoin de plus de développeurs. ;-)
09.11.2008 ThrowIfArgumentIsNull est désormais implémenté et testé sur Codeplex.
la source
Réponses:
Me permet de remplacer:
Avec:
la source
In
, mais ceIsIn
serait peut -être mieux.In<T>(...)
aussi et j'ai trouvé que c'était la méthode d'extension la plus utile en dehors de la bibliothèque standard. Mais je suis en désaccord avec le nomIn
. Un nom de méthode est censé décrire ce qu'il fait, maisIn
ne le fait pas. Je l'ai appeléIsAnyOf<T>(...)
, mais je pense que ceIsIn<T>(...)
serait suffisant aussi.J'ai différentes méthodes d'extension dans mon projet MiscUtil (la source complète est disponible là-bas - je ne vais pas la répéter ici). Mes favoris, dont certains impliquent d'autres classes (comme les gammes):
Date et heure - principalement pour les tests unitaires. Je ne suis pas sûr de les utiliser en production :)
Gammes et pas - merci énormément à Marc Gravell pour son travail d' opérateur pour rendre cela possible:
Comparaisons:
Vérification des arguments:
LINQ to XML appliqué aux types anonymes (ou à d'autres types avec des propriétés appropriées):
Appuyez sur LINQ - serait trop long à expliquer ici, mais recherchez-le.
la source
string.Format raccourci:
Exemple:
Pour copier-coller rapidement, cliquez ici .
Ne trouvez-vous pas plus naturel de taper à la
"some string".F("param")
placestring.Format("some string", "param")
?Pour un nom plus lisible , essayez l'une de ces suggestions:
..
la source
Est-ce utile?
la source
OneOf
on accepte toutIList<T>
. Ensuite , vous pouvez toujours aussi avoir une surcharge qui prend unparams
arg et passe juste que dans laIList<T>
surcharge. J'ai donné une réponse (bien en bas en ce moment) avec uneNextBool
méthode similaire à la vôtreCoinToss
, mais avec une surcharge qui prend unprobability
paramètre (et si je veux que quelque chose se produise 75% du temps?). Aussi, juste un choix: votre exemple de code lancera unNullReferenceException
puisquerand
n'est jamais initialisé.CoinToss
être implémenté avec,rng.NextDouble() < .5
car en interne, il.Next(int)
est fait avec.NextDouble()
pour que vous enregistriez un casting, un * et un chèque.Exemple:
la source
La méthode d'extension:
La méthode s'applique à tous les types et vous permet d'ajouter une plage d'éléments à une liste en tant que paramètres.
Exemple:
la source
var list = new List<int>{5,4,8,4,2};
ICollection<T>
; alors il pourrait également être utilisé sur, par exemple,LinkedList<T>
etHashSet<T>
pas seulement sur des collections indexées.Mettez cela dans le projet codeplex.
Sérialisation / désérialisation d'objets en XML:
la source
ToXml()
(commeToString()
)ForEach pour IEnumerables
Exemple naïf:
Exemple sympa:
Remarque:
Ce n'est pas comme
Select
parceSelect
que votre fonction attend de retourner quelque chose comme pour la transformation en une autre liste.ForEach vous permet simplement d'exécuter quelque chose pour chacun des éléments sans aucune transformation / manipulation de données.
J'ai fait cela pour pouvoir programmer dans un style plus fonctionnel et j'ai été surpris que List ait un ForEach alors que IEnumerable n'en a pas.
Mettez cela dans le projet codeplex
la source
Mes extensions de conversion qui vous permettent de faire:
Le voici, tel que publié sur TheSoftwareJedi.com
Vous pouvez demander la valeur par défaut (appelle un constructeur vide ou "0" pour les chiffres) en cas d'échec, spécifier une valeur "par défaut" (je l'appelle "autre"), ou demander la valeur nulle (où T: classe). J'ai également fourni à la fois des modèles d'exception silencieux et un modèle TryParse typique qui renvoie un booléen indiquant l'action entreprise, et un paramètre de sortie contient la nouvelle valeur. Donc, notre code peut faire des choses comme ça
Je ne pouvais pas faire rouler les types Nullable dans le tout très proprement. J'ai essayé pendant environ 20 minutes avant de jeter l'éponge.
la source
ToOrNull
a exactement le même comportement queToOrDefault
(c'est-à-dire que si vous appelezToOrDefault
un type de référence avec une conversion infructueuse, il reviendranull
). Mais plus important encore, cela me semble un peu redondant car ilvar s = myObject as string
accomplit la même chose quevar s = myObject.ToOrNull<string>()
- mais sans potentiellement avoir à en attraper unInvalidCastException
. Suis-je en train de manquer quelque chose?J'ai une méthode d'extension pour enregistrer les exceptions:
Et il est utilisé comme ceci:
[désolé d'avoir posté deux fois; le 2ème est mieux conçu :-)]
la source
Utile pour analyser une chaîne dans un Enum.
Le mérite revient à Scott Dorman
--- Modifier pour le projet Codeplex ---
J'ai demandé à Scott Dorman s'il voulait bien que nous publions son code dans le projet Codeplex. Voici la réponse que j'ai reçue de lui:
la source
Je trouve celui-ci assez utile:
Vous pouvez l'utiliser sur CodePlex.
la source
DateTimeExtensions
Exemples:
la source
gitorious.org/cadenza est une bibliothèque complète de certaines des méthodes d'extension les plus utiles que j'ai vues.
la source
En voici un que j'utilise fréquemment pour le formatage des présentations.
la source
Voici un va-et-vient pour les chiffres romains. Pas souvent utilisé, mais pourrait être utile. Usage:
La source:
la source
Un moyen pratique de gérer les tailles:
la source
Pour les contrôles Winform:
Utilisation d'IsDesignTime:
Utilisation de SetDropdownWidth:
J'ai oublié de mentionner, n'hésitez pas à les utiliser sur Codeplex ...
la source
Le ThrowIfArgumentIsNull est un bon moyen de faire cette vérification nulle que nous devrions tous faire.
Vous trouverez ci-dessous la façon de l'utiliser et cela fonctionne sur toutes les classes de votre espace de noms ou partout où vous utilisez l'espace de noms à l'intérieur.
Il est correct d'utiliser ce code sur le projet CodePlex .
la source
default(T)
pour cela et supprimerais l'exigence de classe.Require.ThatArgument(input != null)
ouRequire.ThatArgument(personId > 0)
. Il ne prend pas beaucoup plus de code, il est beaucoup plus flexible et il se lit bien. J'ai des remplacements supplémentaires qui prennent des fonctions lorsque vous souhaitez personnaliser le message d'erreur ou l'exception elle-même.Je manque l' instruction With de Visual Basic lors du passage à C #, alors voici:
Et voici comment l'utiliser en C #:
Économise beaucoup de frappe!
Comparez cela à:
mettre en projet codeplex
la source
Prend un camelCaseWord ou PascalCaseWord et le "wordifie", c'est-à-dire camelCaseWord => camel Case Word
Je l'utilise souvent en conjonction avec Capitalize
Exemple d'utilisation
Libre d'utiliser dans le projet codeplex
la source
J'ai trouvé celui-ci utile
Il supprime la vérification nulle dans le code appelant. Vous pouvez maintenant faire
la source
Convertissez un double en chaîne formatée à l'aide de la culture spécifiée:
Exemple:
la source
Vous trouverez ci-dessous une méthode d'extension qui adapte le code de Rick Strahl (et les commentaires aussi) pour vous éviter d'avoir à deviner ou à lire la marque d'ordre des octets d'un tableau d'octets ou d'un fichier texte à chaque fois que vous le convertissez en chaîne.
L'extrait vous permet de faire simplement:
Si vous trouvez des bogues, veuillez ajouter aux commentaires. N'hésitez pas à l'inclure dans le projet Codeplex.
la source
En voici une que je viens de créer aujourd'hui.
Il vous permet de faire ceci:
qui est plus fluide et (OMI) plus lisible que cela:
la source
thingy.NullOr(t => t.Count)
, oùCount
est un int? Vous devriez retournerdefault(TReturn)
plutôt que null, de cette façon, vous n'aurez pas besoin de laclass
contrainte et cela fonctionnera également pour les types de valeurTReturn elseValue = default(TReturn)
que n'est disponible que pour .NET 4.0? J'ai 3.5 SP1 et je n'ai jamais vu cette construction (ni mon compilateur). Je viens de déplacer cela à l'intérieur de la méthode. Un problème, cependant, est que la mise en boîte d'un type nullable à un objet à utiliser avec la méthode donne un résultat inattendu (0 par rapport à null attendu).default(T)
mot - clé existe depuis VS2005, mais je pense que les paramètres par défaut sont une nouvelle fonctionnalité .NET 4. Le moyen le plus simple devrait être d'avoir deux variantes, une qui prend le param et l'autre qui ne le fait pas. Je mettrai à jour la réponse pour être compatible CLR 2.0. En ce qui concerne la boxe - c'est le but dedefault
. Il s'agira de données initialisées à 0 pour un type de valeur et null pour tous les types de référence. Un TReturn d'un type de valeur doit rester non encadré tout au long de la fonction.x.Value
doit retourner null (si, par exemple,int?
était nul) ou la valeur ifint?
a une valeur. Retourner0
quandint? x = null
est passé et encadré à l'objet est un cas étrange. J'ai vu des vérifications similaires pour les types nullables dans des bibliothèques telles que fluent nhibernate et linfu (je pense) pour ce cas spécifique, vous permettant de supprimer la contrainte de classe comme suggéré précédemment."Veuillez marquer vos réponses avec une acceptation pour mettre le code dans le projet Codeplex."
Pourquoi? Tous les trucs sur ce site sous CC-by-sa-2.5 , alors mettez simplement votre projet de débordement d'extension sous la même licence et vous pouvez l'utiliser librement.
Quoi qu'il en soit, voici une fonction String.Reverse, basée sur cette question .
la source
Je me suis fatigué de la vérification nulle fastidieuse lors de l'extraction des valeurs de MySqlDataReader, donc:
Bien sûr, cela pourrait être utilisé avec n'importe quel SqlDataReader.
Hangy et Joe ont tous deux fait de bons commentaires sur la façon de procéder, et j'ai depuis eu l'occasion d'implémenter quelque chose de similaire dans un contexte différent, alors voici une autre version:
la source
as
mot - clé pour obtenir une valeur d'un lecteur permettant null. Si vous combinez l'??
opérateur de coalescence nul avec l'opérateur as, vous pouvez même avoir une valeur par défaut non nulle pour accéder directement à un type de valeur. Voir stackoverflow.com/questions/746767/…Cela m'a énervé que LINQ me donne un OrderBy qui prend une classe implémentant IComparer comme argument, mais ne prend pas en charge la transmission d'une simple fonction de comparaison anonyme. J'ai rectifié cela.
Cette classe crée un IComparer à partir de votre fonction de comparaison ...
... et ces méthodes d'extension exposent mes nouvelles surcharges OrderBy sur les énumérateurs. Je doute que cela fonctionne pour LINQ to SQL, mais c'est génial pour LINQ to Objects.
Vous êtes invités à mettre cela sur codeplex si vous le souhaitez.
la source
Celui-ci est pour MVC, il ajoute la possibilité de générer une
<label />
balise à laHtml
variable qui est disponible dans chaqueViewPage
. J'espère que cela sera utile à d'autres qui essaient de développer des extensions similaires.Utilisation:
Production:
Code:
la source
Tournez ceci:
... dans ceci:
... en utilisant cette méthode d'extension:
Autres méthodes d'extension ADO.NET: DbExtensions
la source