Introduction Depuis que j'ai commencé à utiliser les méthodes d'extension, je n'ai pas pu arrêter de les utiliser. Elles ont grandement amélioré l'efficacité de l'écriture de mon code et j'en suis désormais devenu très dépendant. J'aimerais partager ici ma méthode d'extension couramment utilisée pour la commodité de tous.
(Certains d'entre eux sont empruntés ou appropriés à des articles d'autres blogueurs. Je tiens tout particulièrement à remercier He Chongtian pour ses nombreux partages)
Le code source est fourni à la fin de l'article.
Exemple
chaîne statique publique ExpandAndToString (ce System.Collections.IEnumerable s, caractère d'espacement de chaîne)
Fonction : développez la collection et exécutez respectivement la méthode ToString, puis connectez-les avec le délimiteur spécifié pour les fusionner en une chaîne.
exemple:
[Méthode de test]
public vide TestMethod1()
{
var je = nouveau int[] {1,5,33,14,556} ;
var Sortie="1-5-33-14-556";
Assert.AreEqual(Out,i.ExpandAndToString("-"));
}
public static bool IsNullOrEmpty (cette chaîne s)
Fonction : Vérifiez si l'objet chaîne est un objet vide ou une chaîne vide.
exemple:
[Méthode de test]
public vide TestMethod2()
{
chaîne s = null ;
Assert.AreEqual(true,s.IsNullOrEmpty());
s+= "123" ;
Assert.AreEqual(false, s.IsNullOrEmpty());
}
chaîne statique publique IsNullOrEmptyThen (cette chaîne, expression System.Func<string,string>)
Fonction : Vérifiez si l'objet chaîne est un objet vide ou une chaîne vide. Si tel est le cas, exécutez l'expression entrante et renvoyez le résultat de l'expression.
exemple:
[Méthode de test]
public vide TestMethod3()
{
vars = "";
var Sortie = "1234" ;
Assert.AreEqual(Out, s.IsNullOrEmptyThen(f=>"1234"));
}
public static void IsNullOrEmptyThen (cette chaîne, expression System.Action<string>)
Fonction : Vérifiez si l'objet chaîne est un objet vide ou une chaîne vide, et si tel est le cas, exécutez l'expression entrante.
exemple:
[Méthode de test]
public vide TestMethod4()
{
vars = "";
s.IsNullOrEmptyThen(f => MessageBox.Show("Aucun contenu"));
}
chaîne statique publique FormatWith (cette chaîne s, paramètres de format objet [])
chaîne statique publique FormatWith (cette chaîne s, paramètre de format d'objet 1)
chaîne statique publique FormatWith (cette chaîne s, paramètre de format d'objet 1, paramètre de format d'objet 2)
chaîne statique publique FormatWith (cette chaîne s, paramètre de format d'objet 1, paramètre de format d'objet 2, paramètre de format d'objet 3)
Fonction : Formater la chaîne.
exemple:
[Méthode de test]
public vide TestMethod5()
{
var je = 0,35 ;
variable x = 200 ;
var Sortie = "i:35%;x:200;";
Assert.AreEqual(Out, "i:{0:0%};x:{1};".FormatWith(i,x));
}
public static bool In<T>(ce T t, params T[] base de jugement)
Fonction : Déterminez si l'objet actuel se trouve dans le tableau entrant.
exemple:
[Méthode de test]
public vide TestMethod6()
{
var je = 95 ;
Assert.IsTrue(i.In(31, 3, 55, 67, 95, 12, 4));
}
public static bool In<T, C>(cette expression de jugement T t, System.Func<T,C,bool>, base de jugement params C[])
Fonction : Déterminez si l'objet actuel se trouve dans le tableau entrant. La méthode de jugement est spécifiée par l'expression entrante.
exemple:
[Méthode de test]
public vide TestMethod7()
{
var je = 95 ;
Assert.IsTrue(i.In((c, t) => c.ToString() == t, "31", "3", "55", "67", "95", "12", "4 "));
}
public static bool InRange<T>(this System.IComparable<T> t, T valeur minimale, T valeur maximale)
public static bool InRange (ce System.IComparable t, valeur minimale de l'objet, valeur maximale de l'objet)
Fonction : Déterminez si la valeur actuelle se situe dans la plage spécifiée.
exemple:
[Méthode de test]
public vide TestMethod8()
{
var je = 95 ;
Assert.IsTrue(i.InRange(15, 100));
Assert.IsTrue(i.InRange(-3000, 300));
Assert.IsFalse(i.InRange(-1, 50));
vars = "b";
Assert.IsTrue(s.InRange("a", "c"));
Assert.IsTrue(s.InRange("1", "z"));
Assert.IsFalse(s.InRange("e", "h"));
}
public statique T Trace<T>(ce T t)
public static T Trace<T>(ce T t, classification de chaîne)
public static T Trace<T>(cette expression T t, System.Func<T,object>)
public static T Trace<T>(ce T t, System.Func<T,object> expression, classification de chaîne)
Fonction : affiche la valeur de l'objet actuel dans la fenêtre de sortie de Visual Studio et renvoie l'objet d'origine. Cette fonction est uniquement utilisée pour faciliter le débogage. Les valeurs peuvent être générées à n'importe quelle étape de la chaîne de méthodes sans aucun impact sur la continuité de la chaîne de méthodes.
exemple:
[Méthode de test]
public vide TestMethod9()
{
var s = "abcdefg".Trace(f => f.ToUpper(), "mode expression").Remove(4).Trace("mode normal");
var Sortie = "abcd" ;
Assert.AreEqual(Out, s);
//Le contenu de sortie est le suivant :
//Modèle d'expression : ABCDEFG
//Mode normal : abcd
}
public static T TraceFormat<T>(ce T t, chaîne de format de chaîne)
public static T TraceFormat<T>(ce T t, chaîne de format de chaîne, classification de chaîne)
Fonction : affiche la valeur de l'objet actuel dans la fenêtre de sortie de Visual Studio après le formatage et renvoie l'objet d'origine. Cette fonction est uniquement utilisée pour faciliter le débogage. Les valeurs peuvent être générées à n'importe quelle étape de la chaîne de méthodes sans aucun impact sur la continuité de la chaîne de méthodes.
exemple:
[Méthode de test]
public vide TestMethod10()
{
var m = Math.Max(0.31, 0.65).TraceFormat("La valeur maximale est {0}", "Mode de formatage");
varSortie = 0,65 ;
Assert.AreEqual(Out, m);
//Le contenu de sortie est le suivant :
// Mode format : la valeur maximale est de 0,65
}
public static void ForEach<T> (cette source System.Collections.Generic.IEnumerable<T>, opération System.Action<T>)
public static void ForEach<T> (cette source System.Collections.Generic.IEnumerable<T>, opération System.Action<T,int>)
Fonction : parcourir une collection et effectuer les opérations spécifiées. (Sous la forme surchargée, le paramètre de type int passé dans l'expression représente le nombre actuel de boucles)
exemple:
[Méthode de test]
public vide TestMethod11()
{
var l = nouveau int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
var c = 0;
l.ForEach(f => c += f);
varSortie = 45 ;
Assert.AreEqual(Out, c);
l.ForEach((f, i) => c -= i);
Sortie = 9 ;
Assert.AreEqual(Out, c);
}
public static Switch<T> Switch<T>(ce T v)
public static Case<T,R> Switch<T, R>(ce T v, System.Func<R,R,R> Do)
Fonction : Déterminez la valeur actuelle, effectuez les opérations correspondantes ou renvoyez les valeurs correspondantes selon différentes conditions de correspondance. (Dans la forme surchargée, chaque valeur de retour peut être superposée via des expressions)
Pour des instructions détaillées, veuillez vous référer à : « Méthode d'extension de commutateur/boîtier légèrement améliorée »
exemple:
[Méthode de test]
public vide TestMethod12()
{
var je = 15 ;
i.Switch()
.CaseRun(15, f => MessageBox.Show("égal à 15"),false)
.CaseRun(f => f > 0, f => MessageBox.Show("supérieur à 0"))
.CaseRun(f => f < 0, f => MessageBox.Show("moins de 0"))
.DefaultRun(f => MessageBox.Show("Égal à 0"));
var o = 'c'.Switch()
.CaseReturn('a', 1)
.CaseReturn('b', 2)
.CaseReturn('c', 3)
.CaseReturn('d', 4)
.CaseReturn(f => f > 'd', 5)
.DefaultReturn(0).ReturnValue;
Assert.AreEqual(3, o);
}
public static System.Collections.Generic.IEnumerable<T> RecursionSelect<T>(ce T o, System.Func<T,IEnumerable<T>> expression de sélection d'élément récursive)
public static System.Collections.Generic.IEnumerable<T> RecursionSelect<T>(ce T o, System.Func<T,IEnumerable<T>> expression de sélection d'élément récursive, System.Predicate<T> expression de test)
Fonction : sélectionnez les éléments de manière récursive et renvoyez la collection finale sélectionnée.
Pour une explication des principes pertinents, voir : "Partie avancée 7 de l'utilisation merveilleuse des méthodes d'extension C# : "Tree" Universal Traverser".
exemple:
[Méthode de test]
public vide TestMethod13()
{
//Obtenir toutes les collections de répertoires contenant des sous-répertoires dans le répertoire spécifié
var d = new DirectoryInfo (@"C:UsersPublicDownloads");
var c = d.RecursionSelect(f => f.GetDirectories(), f => f.GetDirectories().Length > 0);
MessageBox.Show(c.Count().ToString());
}
public static System.Collections.Generic.IEnumerable<T> RecursionEachSelect<T>(cette System.Collections.IEnumerable o, System.Func<T,IEnumerable<T>> expression de sélection d'élément récursive)
public static System.Collections.Generic.IEnumerable<T> RecursionEachSelect<T>(ce System.Collections.IEnumerable o, System.Func<T,IEnumerable<T>> expression de sélection d'élément récursive, System.Predicate<T> mode d'expression de test )
public static System.Collections.Generic.IEnumerable<T> RecursionEachSelect<T>(cette System.Collections.Generic.IEnumerable<T> o, System.Func<T,IEnumerable<T>> expression de sélection d'élément récursive)
public static System.Collections.Generic.IEnumerable<T> RecursionEachSelect<T>(ce System.Collections.Generic.IEnumerable<T> o, System.Func<T,IEnumerable<T>> expression de sélection d'élément récursive, System.Predicate < T> expression de test)
Fonction : parcourez l'objet de collection actuel, sélectionnez les éléments de manière récursive un par un et renvoyez la collection finale sélectionnée.
Pour une explication des principes pertinents, voir : "Partie avancée 7 de l'utilisation merveilleuse des méthodes d'extension C# : "Tree" Universal Traverser"
exemple:
[Méthode de test]
public vide TestMethod14()
{
//Obtenir toutes les collections de répertoires contenant des sous-répertoires dans le répertoire spécifié
var l = new List<DirectoryInfo>();
l.Add(new DirectoryInfo (@"C:UsersSkyDDownloads"));
l.Add(new DirectoryInfo (@"C:UsersPublicDownloads"));
var c = l.RecursionEachSelect(f => f.GetDirectories(), f => f.GetDirectories().Length > 0);
MessageBox.Show(c.Count().ToString());
}
public static bool RegexIsMatch (cette chaîne, expression de chaîne, option System.Text.RegularExpressions.RegexOptions)
public static bool RegexIsMatch (cette chaîne, expression de chaîne)
public static System.Text.RegularExpressions.Match RegexMatch (cette chaîne, expression de chaîne, options System.Text.RegularExpressions.RegexOptions)
public static System.Text.RegularExpressions.Match RegexMatch (cette chaîne, expression de chaîne)
public static System.Text.RegularExpressions.MatchCollection RegexMatches (cette chaîne, expression de chaîne, options System.Text.RegularExpressions.RegexOptions)
public static System.Text.RegularExpressions.MatchCollection RegexMatches (cette chaîne, expression de chaîne)
chaîne statique publique RegexReplace (cette chaîne s, expression de chaîne, valeur de remplacement de chaîne, option System.Text.RegularExpressions.RegexOptions)
chaîne statique publique RegexReplace (cette chaîne s, expression de chaîne, valeur de remplacement de chaîne)
chaîne statique publique [] RegexSplit (cette chaîne, expression de chaîne, options System.Text.RegularExpressions.RegexOptions)
chaîne statique publique [] RegexSplit (cette chaîne, expression de chaîne)
Fonction : Encapsulation de fonctions d'expression régulière couramment utilisée, la méthode d'utilisation est la même que celle de la classe Regex.
public static T As<T>(cette chaîne s) où T : new(), extension générale.SpecialString
extension universelle statique publique.HtmlString AsHtmlString (cette chaîne s)
extension universelle statique publique.PathString AsPathString (cette chaîne s)
extension universelle statique publique.ServerPathString AsServerPathString (cette chaîne s)
extension universelle statique publique.UriString AsUriString (cette chaîne s)
extension universelle statique publique.XHtmlString AsXHtmlString (cette chaîne s)
extension universelle statique publique.XmlString AsXmlString (cette chaîne s)
Fonction : défini comme un type spécial de chaîne qui peut être modifié davantage à l'aide de commandes de formatage uniques. (Actuellement, les fonctions de formatage ultérieures après définition sont relativement limitées et seront progressivement ajoutées à l'avenir)
exemple:
[Méthode de test]
public vide TestMethod15()
{
var s = @"C:abc";
var Sortie = @"C:abc1.exe";
Assert.AreEqual(Out, s.AsPathString().Combine (@"D:1.exe".AsPathString().FileName));
}
Conclusion Ce sont les extensions les plus fréquemment utilisées ici, j'espère qu'elles seront également utiles à tout le monde :)
Téléchargez le code source de la méthode d'extension : http://www.uushare.com/user/icesee/file/2435046
Exemple de code source : http://www.uushare.com/user/icesee/file/2435063
Version XPS de cet article : http://www.uushare.com/user/icesee/file/2435098