Pendahuluan Sejak saya mulai menggunakan metode ekstensi, saya tidak dapat berhenti menggunakannya. Metode tersebut telah meningkatkan efisiensi penulisan kode saya secara signifikan, dan sekarang saya menjadi sangat bergantung pada metode tersebut. Saya ingin berbagi metode ekstensi yang umum saya gunakan di sini untuk kenyamanan semua orang.
(Beberapa di antaranya dipinjam atau diambil dari artikel blogger lain. Saya ingin mengucapkan terima kasih khusus kepada He Chongtian atas banyak berbaginya)
Kode sumber disediakan di akhir artikel.
Contoh
string statis publik ExpandAndToString (System.Collections.IEnumerable s ini, karakter pengatur jarak string)
Fungsi: Memperluas koleksi dan menjalankan metode ToString masing-masing, lalu menghubungkannya dengan pembatas yang ditentukan untuk menggabungkannya menjadi sebuah string.
contoh:
[Metode Tes]
kekosongan publik TestMethod1()
{
var i = int baru[] {1,5,33,14,556};
var Keluar="1-5-33-14-556";
Assert.AreEqual(Out,i.ExpandAndToString("-"));
}
bool statis publik IsNullOrEmpty (string ini)
Fungsi: Verifikasi apakah objek string adalah objek kosong atau string kosong.
contoh:
[Metode Tes]
kekosongan publik TestMethod2()
{
string s = nol;
Tegaskan.AreEqual(true,s.IsNullOrEmpty());
s+= "123";
Tegaskan.AreEqual(false, s.IsNullOrEmpty());
}
string statis publik IsNullOrEmptyThen (string ini, ekspresi System.Func<string,string>)
Fungsi: Verifikasi apakah objek string adalah objek kosong atau string kosong. Jika demikian, jalankan ekspresi yang masuk dan kembalikan hasil ekspresi.
contoh:
[Metode Tes]
kekosongan publik TestMethod3()
{
vars = "";
var Keluar = "1234";
Assert.AreEqual(Keluar, s.IsNullOrEmptyThen(f=>"1234"));
}
public static void IsNullOrEmptyThen (string ini, ekspresi System.Action<string>)
Fungsi: Verifikasi apakah objek string adalah objek kosong atau string kosong, dan jika ya, jalankan ekspresi yang masuk.
contoh:
[Metode Tes]
kekosongan publik TestMethod4()
{
vars = "";
s.IsNullOrEmptyThen(f => MessageBox.Show("Tidak ada konten"));
}
string statis publik FormatWith(string ini s, objek params[] parameter format)
string statis publik FormatWith(string ini s, parameter format objek 1)
string statis publik FormatWith(string ini s, parameter format objek 1, parameter format objek 2)
string statis publik FormatWith(string ini s, parameter format objek 1, parameter format objek 2, parameter format objek 3)
Fungsi: Memformat string.
contoh:
[Metode Tes]
kekosongan publik TestMethod5()
{
var i = 0,35;
var x = 200;
var Keluar = "i:35%;x:200;";
Assert.AreEqual(Keluar, "i:{0:0%};x:{1};".FormatWith(i,x));
}
public static bool In<T>(dasar penilaian T ini, params T[])
Fungsi: Menentukan apakah objek saat ini ada dalam array masuk.
contoh:
[Metode Tes]
kekosongan publik TestMethod6()
{
var saya = 95;
Assert.IsTrue(i.In(31, 3, 55, 67, 95, 12, 4));
}
public static bool In<T, C>(ekspresi penilaian T t, System.Func<T,C,bool> ini, params C[] dasar penilaian)
Fungsi: Menentukan apakah objek saat ini ada dalam array masuk. Metode penilaian ditentukan oleh ekspresi masuk.
contoh:
[Metode Tes]
kekosongan publik TestMethod7()
{
var saya = 95;
Tegaskan.IsTrue(i.In((c, t) => c.ToString() == t, "31", "3", "55", "67", "95", "12", "4 "));
}
public static bool InRange<T>(System.IComparable<T> t ini, T nilai minimum, T nilai maksimum)
public static bool InRange (System.IComparable t ini, nilai minimum objek, nilai maksimum objek)
Fungsi: Menentukan apakah nilai saat ini berada dalam kisaran yang ditentukan.
contoh:
[Metode Tes]
kekosongan publik TestMethod8()
{
var saya = 95;
Assert.IsTrue(i.InRange(15, 100));
Assert.IsTrue(i.InRange(-3000, 300));
Tegaskan.IsFalse(i.InRange(-1, 50));
vars = "b";
Tegaskan.IsTrue(s.InRange("a", "c"));
Tegaskan.IsTrue(s.InRange("1", "z"));
Tegaskan.IsFalse(s.InRange("e", "h"));
}
Jejak T statis publik<T>(T t ini)
Jejak T statis publik<T>(T t ini, klasifikasi string)
public static T Trace<T>(ekspresi T t, System.Func<T,object> ini)
public static T Trace<T>(ekspresi T t ini, System.Func<T,object>, klasifikasi string)
Fungsi: Menampilkan nilai objek saat ini ke jendela keluaran Visual Studio dan mengembalikan objek aslinya. Fungsi ini hanya digunakan untuk memfasilitasi debugging. Nilai dapat dikeluarkan pada setiap langkah dalam rantai metode tanpa berdampak pada kelangsungan rantai metode.
contoh:
[Metode Tes]
kekosongan publik TestMethod9()
{
var s = "abcdefg".Trace(f => f.ToUpper(), "mode ekspresi").Remove(4).Trace("mode normal");
var Keluar = "abcd";
Assert.AreEqual(Keluar, s);
//Konten keluarannya adalah sebagai berikut:
//Pola ekspresi: ABCDEFG
//Mode normal: abcd
}
public static T TraceFormat<T>(T t ini, string format string)
public static T TraceFormat<T>(T t ini, string format string, klasifikasi string)
Fungsi: Keluarkan nilai objek saat ini ke jendela keluaran Visual Studio setelah pemformatan, dan kembalikan objek aslinya. Fungsi ini hanya digunakan untuk memfasilitasi debugging. Nilai dapat dikeluarkan pada setiap langkah dalam rantai metode tanpa berdampak pada kelangsungan rantai metode.
contoh:
[Metode Tes]
kekosongan publik TestMethod10()
{
var m = Math.Max(0.31, 0.65).TraceFormat("Nilai Maks Adalah {0}", "Mode Pemformatan");
varOut = 0,65;
Assert.AreEqual(Keluar, m);
//Konten keluarannya adalah sebagai berikut:
//Mode format: Nilai Maks 0,65
}
public static void ForEach<T>(sumber System.Collections.Generic.IEnumerable<T> ini, operasi System.Action<T>)
public static void ForEach<T>(sumber System.Collections.Generic.IEnumerable<T> ini, operasi System.Action<T,int>)
Fungsi: Melintasi koleksi dan melakukan operasi tertentu. (Dalam bentuk kelebihan beban, parameter tipe int yang diteruskan ke ekspresi mewakili jumlah loop saat ini)
contoh:
[Metode Tes]
kekosongan publik TestMethod11()
{
var l = int baru[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
var c = 0;
l.UntukSetiap(f => c += f);
varKeluar = 45;
Assert.AreEqual(Keluar, c);
l.ForEach((f, i) => c -= i);
Keluar = 9;
Assert.AreEqual(Keluar, c);
}
Sakelar statis publik<T> Sakelar<T>(T v ini)
public static Case<T,R> Switch<T, R>(ini T v, System.Func<R,R,R> Do)
Fungsi: Menentukan nilai saat ini, melakukan operasi terkait, atau mengembalikan nilai terkait sesuai dengan kondisi pencocokan yang berbeda. (Dalam bentuk kelebihan beban, setiap nilai kembalian diperbolehkan untuk ditumpangkan melalui ekspresi)
Untuk petunjuk rinci, silakan merujuk ke: "Metode Ekstensi Sakelar/Casing yang Sedikit Lebih Baik"
contoh:
[Metode Tes]
kekosongan publik TestMethod12()
{
var saya = 15;
i.Beralih()
.CaseRun(15, f => MessageBox.Show("sama dengan 15"),false)
.CaseRun(f => f > 0, f => MessageBox.Show("lebih besar dari 0"))
.CaseRun(f => f < 0, f => MessageBox.Show("kurang dari 0"))
.DefaultRun(f => MessageBox.Show("Sama dengan 0"));
var o = 'c'.Beralih()
.CaseReturn('a', 1)
.CaseReturn('b', 2)
.CaseReturn('c', 3)
.CaseReturn('d', 4)
.CaseReturn(f => f > 'd', 5)
.DefaultReturn(0).ReturnValue;
Tegaskan.AreEqual(3, o);
}
public static System.Collections.Generic.IEnumerable<T> RecursionSelect<T>(ini T o, System.Func<T,IEnumerable<T>> ekspresi pemilihan item rekursif)
public static System.Collections.Generic.IEnumerable<T> RecursionSelect<T>(ini T o, System.Func<T,IEnumerable<T>> ekspresi pemilihan item rekursif, ekspresi pengujian System.Predicate<T>)
Fungsi: Memilih item secara rekursif dan mengembalikan koleksi akhir yang dipilih.
Untuk penjelasan tentang prinsip-prinsip yang relevan, lihat: "Bagian Lanjutan 7 dari Penggunaan Metode Ekstensi C# yang Luar Biasa: "Pohon" Universal Traverser"
contoh:
[Metode Tes]
kekosongan publik TestMethod13()
{
//Dapatkan semua koleksi direktori yang berisi subdirektori di direktori yang ditentukan
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>(System.Collections.IEnumerable ini o, System.Func<T,IEnumerable<T>> ekspresi pemilihan item rekursif)
public static System.Collections.Generic.IEnumerable<T> RecursionEachSelect<T>(System.Collections.IEnumerable ini o, System.Func<T,IEnumerable<T>> ekspresi pemilihan item rekursif, System.Predicate<T> mode ekspresi pengujian )
public static System.Collections.Generic.IEnumerable<T> RecursionEachSelect<T>(System.Collections.Generic.IEnumerable<T> o, System.Func<T,IEnumerable<T>> ekspresi pemilihan item rekursif)
public static System.Collections.Generic.IEnumerable<T> RecursionEachSelect<T>(System.Collections.Generic.IEnumerable<T> o, System.Func<T,IEnumerable<T>> ekspresi pemilihan item rekursif, System.Predicate < T> ekspresi uji)
Fungsi: Melintasi objek koleksi saat ini, memilih item satu per satu secara rekursif, dan mengembalikan koleksi akhir yang dipilih.
Untuk penjelasan tentang prinsip-prinsip yang relevan, lihat: "Bagian Lanjutan 7 dari Penggunaan Metode Ekstensi C# yang Luar Biasa: "Pohon" Universal Traverser"
contoh:
[Metode Tes]
kekosongan publik TestMethod14()
{
//Dapatkan semua koleksi direktori yang berisi subdirektori di direktori yang ditentukan
var l = Daftar baru<DirectoryInfo>();
l.Tambahkan(Info Direktori baru(@"C:UsersSkyDDownloads"));
l.Tambahkan(DirektoriInfo baru(@"C:UsersPublicDownloads"));
var c = l.RecursionEachSelect(f => f.GetDirectories(), f => f.GetDirectories().Length > 0);
MessageBox.Show(c.Count().ToString());
}
bool statis publik RegexIsMatch (string ini, ekspresi string, opsi System.Text.RegularExpressions.RegexOptions)
bool statis publik RegexIsMatch (string ini, ekspresi string)
public static System.Text.RegularExpressions.Match RegexMatch (string ini, ekspresi string, opsi System.Text.RegularExpressions.RegexOptions)
public static System.Text.RegularExpressions.Match RegexMatch (string ini, ekspresi string)
public static System.Text.RegularExpressions.MatchCollection RegexMatches (string ini, ekspresi string, opsi System.Text.RegularExpressions.RegexOptions)
public static System.Text.RegularExpressions.MatchCollection RegexMatches (string ini, ekspresi string)
string statis publik RegexReplace (string ini, ekspresi string, nilai penggantian string, opsi System.Text.RegularExpressions.RegexOptions)
string statis publik RegexReplace (string ini, ekspresi string, nilai penggantian string)
string statis publik[] RegexSplit(string ini, ekspresi string, opsi System.Text.RegularExpressions.RegexOptions)
string statis publik[] RegexSplit(string ini, ekspresi string)
Fungsi: Enkapsulasi fungsi ekspresi reguler yang umum digunakan, metode penggunaannya sama dengan kelas Regex.
public static T As<T>(string ini s) di mana T : new(), ekstensi umum.SpecialString
ekstensi universal statis publik.HtmlString AsHtmlString(string ini s)
ekstensi universal statis publik.PathString AsPathString(string ini s)
ekstensi universal statis publik.ServerPathString AsServerPathString(string ini s)
ekstensi universal statis publik.UriString AsUriString(string ini s)
ekstensi universal statis publik.XHtmlString AsXHtmlString(string ini s)
ekstensi universal statis publik.XmlString AsXmlString(string ini s)
Fungsi: Didefinisikan sebagai tipe string khusus yang dapat dimodifikasi lebih lanjut menggunakan perintah pemformatan unik. (Saat ini, fungsi pemformatan selanjutnya setelah definisi relatif terbatas dan akan ditambahkan secara bertahap di masa mendatang)
contoh:
[Metode Tes]
kekosongan publik TestMethod15()
{
var s = @"C:abc";
var Keluar = @"C:abc1.exe";
Assert.AreEqual(Keluar, s.AsPathString().Combine(@"D:1.exe".AsPathString().FileName));
}
Kesimpulan Ini adalah ekstensi yang paling sering digunakan di sini, saya harap ekstensi ini juga bermanfaat bagi semua orang :)
Unduh kode sumber metode ekstensi: http://www.uushare.com/user/icesee/file/2435046
Contoh kode sumber: http://www.uushare.com/user/icesee/file/2435063
Versi XPS artikel ini: http://www.uushare.com/user/icesee/file/2435098