Einführung Seitdem ich mit der Verwendung von Erweiterungsmethoden begonnen habe, konnte ich nicht mehr damit aufhören. Sie haben die Effizienz meines Codeschreibens erheblich verbessert, und jetzt bin ich stark von ihnen abhängig. Zur Vereinfachung möchte ich hier meine häufig verwendeten Erweiterungsmethoden vorstellen.
(Einige davon sind den Artikeln anderer Blogger entlehnt oder angeeignet. Ich möchte He Chongtian besonders für seine vielen Beiträge danken.)
Der Quellcode wird am Ende des Artikels bereitgestellt.
Beispiel
öffentlicher statischer String ExpandAndToString(dieses System.Collections.IEnumerable s, String-Leerzeichen)
Funktion: Erweitern Sie die Sammlung und führen Sie jeweils die ToString-Methode aus und verbinden Sie sie dann mit dem angegebenen Trennzeichen, um sie zu einer Zeichenfolge zusammenzufügen.
Beispiel:
[Testmethode]
public void TestMethod1()
{
var i = new int[] {1,5,33,14,556};
var Out="1-5-33-14-556";
Assert.AreEqual(Out,i.ExpandAndToString("-"));
}
öffentlicher statischer Bool IsNullOrEmpty(dieser String s)
Funktion: Überprüfen Sie, ob das Zeichenfolgenobjekt ein leeres Objekt oder eine leere Zeichenfolge ist.
Beispiel:
[Testmethode]
public void TestMethod2()
{
Zeichenfolge s = null;
Assert.AreEqual(true,s.IsNullOrEmpty());
s += "123";
Assert.AreEqual(false, s.IsNullOrEmpty());
}
öffentliche statische Zeichenfolge IsNullOrEmptyThen(diese Zeichenfolge s, System.Func<string,string> Ausdruck)
Funktion: Überprüfen Sie, ob das Zeichenfolgenobjekt ein leeres Objekt oder eine leere Zeichenfolge ist. Wenn ja, führen Sie den eingehenden Ausdruck aus und geben Sie das Ausdrucksergebnis zurück.
Beispiel:
[Testmethode]
public void TestMethod3()
{
vars = "";
var Out = "1234";
Assert.AreEqual(Out, s.IsNullOrEmptyThen(f=>"1234"));
}
public static void IsNullOrEmptyThen(this string s, System.Action<string> expression)
Funktion: Überprüfen Sie, ob das Zeichenfolgenobjekt ein leeres Objekt oder eine leere Zeichenfolge ist, und führen Sie in diesem Fall den eingehenden Ausdruck aus.
Beispiel:
[Testmethode]
public void TestMethod4()
{
vars = "";
s.IsNullOrEmptyThen(f => MessageBox.Show("Kein Inhalt"));
}
öffentlicher statischer String FormatWith(dieser String s, params object[] Formatparameter)
öffentliche statische Zeichenfolge FormatWith(diese Zeichenfolge s, Objektformatparameter 1)
öffentliche statische Zeichenfolge FormatWith(diese Zeichenfolge s, Objektformatparameter 1, Objektformatparameter 2)
öffentliche statische Zeichenfolge FormatWith(diese Zeichenfolge s, Objektformatparameter 1, Objektformatparameter 2, Objektformatparameter 3)
Funktion: Zeichenfolge formatieren.
Beispiel:
[Testmethode]
public void TestMethod5()
{
var i = 0,35;
var x = 200;
var Out = "i:35%;x:200;";
Assert.AreEqual(Out, "i:{0:0%};x:{1};".FormatWith(i,x));
}
public static bool In<T>(dieses T t, params T[] Beurteilungsbasis)
Funktion: Bestimmen Sie, ob sich das aktuelle Objekt im eingehenden Array befindet.
Beispiel:
[Testmethode]
public void TestMethod6()
{
var i = 95;
Assert.IsTrue(i.In(31, 3, 55, 67, 95, 12, 4));
}
public static bool In<T, C>(dieses T t, System.Func<T,C,bool> Urteilsausdruck, Parameter C[] Urteilsbasis)
Funktion: Bestimmen Sie, ob sich das aktuelle Objekt im eingehenden Array befindet. Die Beurteilungsmethode wird durch den eingehenden Ausdruck angegeben.
Beispiel:
[Testmethode]
public void TestMethod7()
{
var i = 95;
Assert.IsTrue(i.In((c, t) => c.ToString() == t, "31", "3", "55", "67", "95", "12", "4 "));
}
public static bool InRange<T>(dieses System.IComparable<T> t, T-Minimalwert, T-Maximalwert)
public static bool InRange(this System.IComparable t, minimaler Objektwert, maximaler Objektwert)
Funktion: Bestimmen Sie, ob der aktuelle Wert innerhalb des angegebenen Bereichs liegt.
Beispiel:
[Testmethode]
public void TestMethod8()
{
var i = 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 static T Trace<T>(this T t)
public static T Trace<T>(dieses T t, String-Klassifizierung)
public static T Trace<T>(dieser T t, System.Func<T,object> Ausdruck)
public static T Trace<T>(dieses T t, System.Func<T,object> Ausdruck, String-Klassifizierung)
Funktion: Geben Sie den Wert des aktuellen Objekts an das Visual Studio-Ausgabefenster aus und geben Sie das ursprüngliche Objekt zurück. Diese Funktion dient nur zur Erleichterung des Debuggens. Werte können in jedem Schritt der Methodenkette ausgegeben werden, ohne dass dies Auswirkungen auf die Kontinuität der Methodenkette hat.
Beispiel:
[Testmethode]
public void TestMethod9()
{
var s = "abcdefg".Trace(f => f.ToUpper(), "expression mode").Remove(4).Trace("normal mode");
var Out = "abcd";
Assert.AreEqual(Out, s);
//Der Ausgabeinhalt ist wie folgt:
//Ausdrucksmuster: ABCDEFG
//Normaler Modus: abcd
}
öffentliches statisches T TraceFormat<T>(dieses T t, Zeichenfolgenformatzeichenfolge)
öffentliches statisches T TraceFormat<T>(dieses T t, Zeichenfolgenformatzeichenfolge, Zeichenfolgenklassifizierung)
Funktion: Geben Sie den Wert des aktuellen Objekts nach der Formatierung an das Visual Studio-Ausgabefenster aus und geben Sie das ursprüngliche Objekt zurück. Diese Funktion dient nur zur Erleichterung des Debuggens. Werte können in jedem Schritt der Methodenkette ausgegeben werden, ohne dass dies Auswirkungen auf die Kontinuität der Methodenkette hat.
Beispiel:
[Testmethode]
public void TestMethod10()
{
var m = Math.Max(0.31, 0.65).TraceFormat("Max Value Is {0}", "Formatting Mode");
varOut = 0,65;
Assert.AreEqual(Out, m);
//Der Ausgabeinhalt ist wie folgt:
//Formatmodus: Maximalwert ist 0,65
}
public static void ForEach<T> (diese System.Collections.Generic.IEnumerable<T>-Quelle, System.Action<T>-Operation)
public static void ForEach<T> (diese System.Collections.Generic.IEnumerable<T>-Quelle, System.Action<T,int>-Operation)
Funktion: Eine Sammlung durchlaufen und bestimmte Vorgänge ausführen. (In der überladenen Form stellt der an den Ausdruck übergebene int-Typparameter die aktuelle Anzahl der Schleifen dar.)
Beispiel:
[Testmethode]
public void TestMethod11()
{
var l = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
var c = 0;
l.ForEach(f => c += f);
varOut = 45;
Assert.AreEqual(Out, c);
l.ForEach((f, i) => c -= i);
Aus = 9;
Assert.AreEqual(Out, c);
}
public static Switch<T> Switch<T>(dieser T v)
public static Case<T,R> Switch<T, R>(dieses T v, System.Func<R,R,R> Do)
Funktion: Bestimmen Sie den aktuellen Wert, führen Sie entsprechende Operationen aus oder geben Sie entsprechende Werte gemäß verschiedenen Übereinstimmungsbedingungen zurück. (In der überladenen Form darf jeder Rückgabewert durch Ausdrücke überlagert werden.)
Ausführliche Anweisungen finden Sie unter: „Leicht verbesserte Schalter-/Gehäuseverlängerungsmethode“.
Beispiel:
[Testmethode]
public void TestMethod12()
{
var i = 15;
i.Switch()
.CaseRun(15, f => MessageBox.Show("gleich 15"),false)
.CaseRun(f => f > 0, f => MessageBox.Show("größer als 0"))
.CaseRun(f => f < 0, f => MessageBox.Show("weniger als 0"))
.DefaultRun(f => MessageBox.Show("Gleich 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>(dieser To, System.Func<T,IEnumerable<T>> rekursiver Elementauswahlausdruck)
öffentliches statisches System.Collections.Generic.IEnumerable<T> RecursionSelect<T>(dieses To, System.Func<T,IEnumerable<T>> rekursiver Elementauswahlausdruck, System.Predicate<T> Testausdruck)
Funktion: Elemente rekursiv auswählen und die endgültig ausgewählte Sammlung zurückgeben.
Eine Erläuterung der relevanten Prinzipien finden Sie unter: „Erweiterter Teil 7 der wunderbaren Verwendung von C#-Erweiterungsmethoden: „Tree“ Universal Traverser“
Beispiel:
[Testmethode]
public void TestMethod13()
{
//Alle Verzeichnissammlungen abrufen, die Unterverzeichnisse im angegebenen Verzeichnis enthalten
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>(dieser System.Collections.IEnumerable o, System.Func<T,IEnumerable<T>> rekursive Elementauswahlausdruck)
öffentliches statisches System.Collections.Generic.IEnumerable<T> RecursionEachSelect<T>(dieses System.Collections.IEnumerable o, System.Func<T,IEnumerable<T>> rekursiver Elementauswahlausdruck, System.Predicate<T> Testausdruck Modus )
public static System.Collections.Generic.IEnumerable<T> RecursionEachSelect<T>(dieser System.Collections.Generic.IEnumerable<T> o, System.Func<T,IEnumerable<T>> rekursiver Elementauswahlausdruck)
public static System.Collections.Generic.IEnumerable<T> RecursionEachSelect<T>(dieses System.Collections.Generic.IEnumerable<T> o, System.Func<T,IEnumerable<T>> rekursiver Elementauswahlausdruck, System.Predicate < T> Testausdruck)
Funktion: Durchlaufen Sie das aktuelle Sammlungsobjekt, wählen Sie Elemente nacheinander rekursiv aus und geben Sie die endgültig ausgewählte Sammlung zurück.
Eine Erläuterung der relevanten Prinzipien finden Sie unter: „Erweiterter Teil 7 der wunderbaren Verwendung von C#-Erweiterungsmethoden: „Tree“ Universal Traverser“
Beispiel:
[Testmethode]
public void TestMethod14()
{
//Alle Verzeichnissammlungen abrufen, die Unterverzeichnisse im angegebenen Verzeichnis enthalten
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(dieser String s, String-Ausdruck, System.Text.RegularExpressions.RegexOptions-Option)
public static bool RegexIsMatch(diese Zeichenfolge s, Zeichenfolgenausdruck)
öffentliches statisches System.Text.RegularExpressions.Match RegexMatch (dieser String s, String-Ausdruck, System.Text.RegularExpressions.RegexOptions-Optionen)
öffentliches statisches System.Text.RegularExpressions.Match RegexMatch(diese Zeichenfolge s, Zeichenfolgenausdruck)
öffentliches statisches System.Text.RegularExpressions.MatchCollection RegexMatches (diese Zeichenfolge s, Zeichenfolgenausdruck, System.Text.RegularExpressions.RegexOptions-Optionen)
öffentliches statisches System.Text.RegularExpressions.MatchCollection RegexMatches(diese Zeichenfolge s, Zeichenfolgenausdruck)
öffentlicher statischer String RegexReplace (dieser String s, String-Ausdruck, String-Ersetzungswert, System.Text.RegularExpressions.RegexOptions-Option)
öffentliche statische Zeichenfolge RegexReplace (diese Zeichenfolge, Zeichenfolgenausdruck, Zeichenfolgenersatzwert)
öffentlicher statischer String[] RegexSplit(dieser String s, String-Ausdruck, System.Text.RegularExpressions.RegexOptions-Optionen)
öffentlicher statischer String[] RegexSplit(dieser String s, String-Ausdruck)
Funktion: Häufig verwendete Kapselung von regulären Ausdrucksfunktionen. Die Verwendungsmethode ist dieselbe wie bei der Regex-Klasse.
öffentliches statisches T As<T>(dieser String s) wobei T: new(), allgemeine Erweiterung.SpecialString
öffentliche statische universelle Erweiterung.HtmlString AsHtmlString(diese Zeichenfolge s)
öffentliche statische universelle Erweiterung.PathString AsPathString(diese Zeichenfolge s)
öffentliche statische universelle Erweiterung.ServerPathString AsServerPathString(diese Zeichenfolge s)
öffentliche statische universelle Erweiterung.UriString AsUriString(diese Zeichenfolge s)
öffentliche statische universelle Erweiterung.XHtmlString AsXHtmlString(diese Zeichenfolge s)
öffentliche statische universelle Erweiterung.XmlString AsXmlString(diese Zeichenfolge s)
Funktion: Definiert als spezieller String-Typ, der mithilfe eindeutiger Formatierungsbefehle weiter geändert werden kann. (Derzeit sind die nachfolgenden Formatierungsfunktionen nach der Definition relativ begrenzt und werden in Zukunft schrittweise hinzugefügt.)
Beispiel:
[Testmethode]
public void TestMethod15()
{
var s = @"C:abc";
var Out = @"C:abc1.exe";
Assert.AreEqual(Out, s.AsPathString().Combine(@"D:1.exe".AsPathString().FileName));
}
Fazit Dies sind die hier am häufigsten verwendeten Erweiterungen. Ich hoffe, sie sind für alle gleichermaßen nützlich :)
Laden Sie den Quellcode der Erweiterungsmethode herunter: http://www.uushare.com/user/icesee/file/2435046
Beispielquellcode: http://www.uushare.com/user/icesee/file/2435063
XPS-Version dieses Artikels: http://www.uushare.com/user/icesee/file/2435098