บทนำ นับตั้งแต่ฉันเริ่มใช้วิธีการขยาย ฉันไม่สามารถหยุดใช้วิธีการเหล่านี้ได้ปรับปรุงประสิทธิภาพในการเขียนโค้ดของฉันอย่างมาก และตอนนี้ฉันก็พึ่งพาวิธีการเหล่านี้อย่างมาก ฉันต้องการแบ่งปันวิธีการขยายที่ใช้กันทั่วไปซึ่งตั้งค่าไว้ที่นี่เพื่อความสะดวกของทุกคน
(บางส่วนยืมมาจากบทความของบล็อกเกอร์อื่นๆ ผมขอขอบคุณ He Chongtian เป็นพิเศษสำหรับการแบ่งปันมากมายของเขา)
ซอร์สโค้ดมีให้ที่ส่วนท้ายของบทความ
ตัวอย่าง
สตริงคงที่สาธารณะ ExpandAndToString (S System.Collections.IEnumerable นี้ อักขระตัวเว้นวรรคสตริง)
ฟังก์ชัน: ขยายคอลเลกชันและดำเนินการเมธอด ToString ตามลำดับ จากนั้นเชื่อมต่อกับตัวคั่นที่ระบุเพื่อต่อเข้าเป็นสตริง
ตัวอย่าง:
[วิธีทดสอบ]
โมฆะสาธารณะ TestMethod1()
-
var i = ใหม่ int[] {1,5,33,14,556};
var ออก = "1-5-33-14-556";
Assert.AreEqual(ออก,i.ExpandAndToString("-"));
-
บูลคงที่สาธารณะ IsNullOrEmpty (สตริงนี้)
ฟังก์ชัน: ตรวจสอบว่าวัตถุสตริงเป็นวัตถุว่างหรือสตริงว่าง
ตัวอย่าง:
[วิธีทดสอบ]
โมฆะสาธารณะ TestMethod2()
-
สตริง s = โมฆะ;
Assert.AreEqual(จริง,s.IsNullOrEmpty());
ส += "123";
Assert.AreEqual(false, s.IsNullOrEmpty());
-
สตริงสาธารณะ IsNullOrEmptyThen (สตริงนี้ s, นิพจน์ System.Func <string, string>)
ฟังก์ชัน: ตรวจสอบว่าวัตถุสตริงเป็นวัตถุว่างหรือสตริงว่าง หากเป็นเช่นนั้น ให้ดำเนินการนิพจน์ขาเข้าและส่งกลับผลลัพธ์นิพจน์
ตัวอย่าง:
[วิธีทดสอบ]
โมฆะสาธารณะ TestMethod3()
-
วาร์ส = "";
var ออก = "1234";
Assert.AreEqual(ออก, s.IsNullOrEmptyThen(f=>"1234"));
-
โมฆะคงสาธารณะ IsNullOrEmptyThen (s สตริงนี้ นิพจน์ System.Action<string>)
ฟังก์ชัน: ตรวจสอบว่าออบเจ็กต์สตริงเป็นออบเจ็กต์ว่างหรือสตริงว่าง และหากเป็นเช่นนั้น ให้ดำเนินการนิพจน์ขาเข้า
ตัวอย่าง:
[วิธีทดสอบ]
โมฆะสาธารณะ TestMethod4()
-
วาร์ส = "";
s.IsNullOrEmptyThen(f => MessageBox.Show("ไม่มีเนื้อหา"));
-
สตริงคงที่สาธารณะ FormatWith (สตริงนี้ s, พารามิเตอร์รูปแบบวัตถุ params [])
สตริงคงที่สาธารณะ FormatWith (สตริงนี้ s พารามิเตอร์รูปแบบวัตถุ 1)
สตริงคงที่สาธารณะ FormatWith (สตริงนี้ s, พารามิเตอร์รูปแบบวัตถุ 1, พารามิเตอร์รูปแบบวัตถุ 2)
สตริงคงที่สาธารณะ FormatWith (สตริงนี้ s, พารามิเตอร์รูปแบบวัตถุ 1, พารามิเตอร์รูปแบบวัตถุ 2, พารามิเตอร์รูปแบบวัตถุ 3)
ฟังก์ชัน: จัดรูปแบบสตริง
ตัวอย่าง:
[วิธีทดสอบ]
โมฆะสาธารณะ TestMethod5()
-
วาร์ i = 0.35;
วาร์ x = 200;
var ออก = "i:35%;x:200;";
Assert.AreEqual(Out, "i:{0:0%};x:{1};".FormatWith(i,x));
-
บูลคงที่สาธารณะ In<T>(T t, params T[] พื้นฐานการตัดสิน)
ฟังก์ชั่น: ตรวจสอบว่าวัตถุปัจจุบันอยู่ในอาร์เรย์ขาเข้าหรือไม่
ตัวอย่าง:
[วิธีทดสอบ]
โมฆะสาธารณะ TestMethod6()
-
วาร์ i = 95;
Assert.IsTrue(i.In(31, 3, 55, 67, 95, 12, 4));
-
บูลคงที่สาธารณะใน<T, C>(T t นี้, System.Func<T,C,bool> นิพจน์การตัดสิน, พื้นฐานการตัดสินของ C[])
ฟังก์ชัน: ตรวจสอบว่าวัตถุปัจจุบันอยู่ในอาร์เรย์ขาเข้าหรือไม่ วิธีการตัดสินจะถูกระบุโดยนิพจน์ขาเข้า
ตัวอย่าง:
[วิธีทดสอบ]
โมฆะสาธารณะ TestMethod7()
-
วาร์ i = 95;
Assert.IsTrue(i.In((c, t) => c.ToString() == t, "31", "3", "55", "67", "95", "12", "4" "));
-
บูลคงที่สาธารณะ InRange<T>(System.IComparable<T> t, ค่าต่ำสุด T, ค่าสูงสุด T)
บูลคงที่สาธารณะ InRange (System.IComparable t นี้, ค่าต่ำสุดของวัตถุ, ค่าสูงสุดของวัตถุ)
ฟังก์ชัน: ตรวจสอบว่าค่าปัจจุบันอยู่ภายในช่วงที่ระบุหรือไม่
ตัวอย่าง:
[วิธีทดสอบ]
โมฆะสาธารณะ TestMethod8()
-
วาร์ i = 95;
Assert.IsTrue(i.InRange(15, 100));
Assert.IsTrue(i.InRange(-3000, 300));
Assert.IsFalse(i.InRange(-1, 50));
วาร์ส = "ข";
Assert.IsTrue(s.InRange("a", "c"));
Assert.IsTrue(s.InRange("1", "z"));
Assert.IsFalse(s.InRange("e", "h"));
-
การติดตาม T แบบคงที่สาธารณะ<T>(T นี้)
T Trace สาธารณะแบบคงที่ <T> (T t นี้, การจำแนกสตริง)
T Trace สาธารณะแบบคงที่ <T> (นิพจน์ T t, System.Func <T, object> นี้)
T Trace สาธารณะแบบคงที่ <T> (T t นี้, นิพจน์ System.Func <T, object>, การจำแนกสตริง)
ฟังก์ชั่น: ส่งออกค่าของวัตถุปัจจุบันไปยังหน้าต่างเอาต์พุตของ Visual Studio และส่งคืนวัตถุดั้งเดิม ฟังก์ชันนี้ใช้เพื่ออำนวยความสะดวกในการแก้ไขจุดบกพร่องเท่านั้น สามารถส่งออกค่าในขั้นตอนใดก็ได้ในห่วงโซ่วิธีการโดยไม่มีผลกระทบต่อความต่อเนื่องของห่วงโซ่วิธีการ
ตัวอย่าง:
[วิธีทดสอบ]
โมฆะสาธารณะ TestMethod9()
-
var s = "abcdefg".Trace(f => f.ToUpper(), "โหมดการแสดงออก").ลบ(4).Trace("โหมดปกติ");
var ออก = "abcd";
Assert.AreEqual(ออก, s);
//เนื้อหาที่ส่งออกมีดังนี้:
// รูปแบบนิพจน์: ABCDEFG
//โหมดปกติ: abcd
-
สาธารณะ TraceFormat แบบคงที่ <T> (T t นี้, สตริงรูปแบบสตริง)
public static T TraceFormat<T>(T t นี้, สตริงรูปแบบสตริง, การจำแนกสตริง)
ฟังก์ชัน: ส่งออกค่าของวัตถุปัจจุบันไปยังหน้าต่างเอาต์พุตของ Visual Studio หลังจากการฟอร์แมต และส่งคืนวัตถุต้นฉบับ ฟังก์ชันนี้ใช้เพื่ออำนวยความสะดวกในการแก้ไขจุดบกพร่องเท่านั้น สามารถส่งออกค่าในขั้นตอนใดก็ได้ในห่วงโซ่วิธีการโดยไม่มีผลกระทบต่อความต่อเนื่องของห่วงโซ่วิธีการ
ตัวอย่าง:
[วิธีทดสอบ]
โมฆะสาธารณะ TestMethod10()
-
var m = Math.Max(0.31, 0.65).TraceFormat("ค่าสูงสุดคือ {0}", "โหมดการจัดรูปแบบ");
varOut = 0.65;
Assert.AreEqual(ออก, ม.);
//เนื้อหาที่ส่งออกมีดังนี้:
//โหมดรูปแบบ: ค่าสูงสุดคือ 0.65
-
โมฆะคงที่สาธารณะ ForEach <T> (แหล่งที่มา System.Collections.Generic.IEnumerable <T> การดำเนินการ System.Action <T>)
โมฆะคงที่สาธารณะ ForEach <T> (แหล่งที่มา System.Collections.Generic.IEnumerable <T> การดำเนินการ System.Action <T, int>)
ฟังก์ชัน: สำรวจคอลเลกชันและดำเนินการตามที่ระบุ (ในรูปแบบโอเวอร์โหลด พารามิเตอร์ประเภท int ที่ส่งผ่านไปยังนิพจน์แสดงถึงจำนวนลูปปัจจุบัน)
ตัวอย่าง:
[วิธีทดสอบ]
โมฆะสาธารณะ TestMethod11()
-
var l = ใหม่ int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
วาร์ ค = 0;
l.ForEach(f => c += f);
varOut = 45;
Assert.AreEqual(ออก, c);
l.ForEach((f, i) => c -= i);
ออก = 9;
Assert.AreEqual(ออก, c);
-
สวิตช์คงที่สาธารณะ<T> สวิตช์<T>(T v นี้)
กรณีคงที่สาธารณะ<T,R> สวิตช์<T, R>(T v, System.Func<R,R,R> Do นี้)
ฟังก์ชั่น: กำหนดค่าปัจจุบัน ดำเนินการที่สอดคล้องกัน หรือส่งคืนค่าที่สอดคล้องกันตามเงื่อนไขการจับคู่ที่แตกต่างกัน (ในรูปแบบโอเวอร์โหลด แต่ละค่าที่ส่งคืนสามารถซ้อนทับผ่านนิพจน์ได้)
สำหรับคำแนะนำโดยละเอียด โปรดดูที่: "วิธีการขยายสวิตช์/เคสที่ได้รับการปรับปรุงเล็กน้อย"
ตัวอย่าง:
[วิธีทดสอบ]
โมฆะสาธารณะ TestMethod12()
-
วาร์ i = 15;
i.สวิตช์()
.CaseRun(15, f => MessageBox.Show("เท่ากับ 15"),false)
.CaseRun(f => f > 0, f => MessageBox.Show("greater than 0"))
.CaseRun(f => f < 0, f => MessageBox.Show("น้อยกว่า 0"))
.DefaultRun(f => MessageBox.Show("เท่ากับ 0"));
var o = 'c' สวิตช์ ()
.CaseReturn('a', 1)
.CaseReturn('b', 2)
.CaseReturn('c', 3)
.CaseReturn('d', 4)
.CaseReturn(f => f > 'd', 5)
.DefaultReturn(0).ค่าส่งคืน;
Assert.AreEqual(3, o);
-
สาธารณะคง System.Collections.Generic.IEnumerable<T> RecursionSelect<T>(T o, System.Func<T,IEnumerable<T>> นิพจน์การเลือกรายการแบบเรียกซ้ำ)
สาธารณะคง System.Collections.Generic.IEnumerable<T> RecursionSelect<T>(T o, System.Func<T,IEnumerable<T>> นิพจน์การเลือกรายการแบบเรียกซ้ำ, System.Predicate<T> นิพจน์ทดสอบ)
ฟังก์ชั่น: เลือกรายการซ้ำและส่งคืนคอลเลกชันที่เลือกสุดท้าย
สำหรับคำอธิบายหลักการที่เกี่ยวข้อง โปรดดูที่: "ขั้นสูงส่วนที่ 7 ของการใช้ที่ยอดเยี่ยมของวิธีการขยาย C#: "Tree" Universal Traverser"
ตัวอย่าง:
[วิธีทดสอบ]
โมฆะสาธารณะ TestMethod13()
-
//รับคอลเลกชันไดเร็กทอรีทั้งหมดที่มีไดเร็กทอรีย่อยในไดเร็กทอรีที่ระบุ
var d = new DirectoryInfo(@"C:UsersPublicDownloads");
var c = d.RecursionSelect(f => f.GetDirectories(), f => f.GetDirectories().ความยาว > 0);
MessageBox.Show(c.Count().ToString());
-
System.Collections.Generic.IEnumerable<T> RecursionEachSelect<T> แบบคงที่สาธารณะ (System.Collections.IEnumerable นี้ o, System.Func<T,IEnumerable<T>> นิพจน์การเลือกรายการแบบเรียกซ้ำ)
สาธารณะคงที่ System.Collections.Generic.IEnumerable<T> RecursionEachSelect<T>(This System.Collections.IEnumerable o, System.Func<T,IEnumerable<T>> นิพจน์การเลือกรายการแบบเรียกซ้ำ, System.Predicate<T> โหมดนิพจน์การทดสอบ )
System.Collections.Generic.IEnumerable<T> RecursionEachSelect<T> แบบคงที่สาธารณะ (System.Collections.Generic.IEnumerable<T> o, System.Func<T,IEnumerable<T>> นิพจน์การเลือกรายการแบบเรียกซ้ำ)
System.Collections.Generic.IEnumerable<T> RecursionEachSelect<T>(System.Collections.Generic.IEnumerable<T> นี้สาธารณะ o, System.Func<T,IEnumerable<T>> นิพจน์การเลือกรายการแบบเรียกซ้ำ System.Predicate < T> ทดสอบนิพจน์)
ฟังก์ชั่น: สำรวจวัตถุคอลเลกชันปัจจุบัน เลือกรายการซ้ำทีละรายการ และส่งคืนคอลเลกชันที่เลือกสุดท้าย
สำหรับคำอธิบายหลักการที่เกี่ยวข้อง โปรดดูที่: "ขั้นสูงส่วนที่ 7 ของการใช้ที่ยอดเยี่ยมของวิธีการขยาย C#: "Tree" Universal Traverser"
ตัวอย่าง:
[วิธีทดสอบ]
โมฆะสาธารณะ TestMethod14()
-
//รับคอลเลกชันไดเร็กทอรีทั้งหมดที่มีไดเร็กทอรีย่อยในไดเร็กทอรีที่ระบุ
var l = รายการใหม่ <DirectoryInfo>();
l.Add(new DirectoryInfo(@"C:UsersSkyDDownloads"));
l.Add(new DirectoryInfo(@"C:UsersPublicDownloads"));
var c = l.RecursionEachSelect(f => f.GetDirectories(), f => f.GetDirectories().ความยาว > 0);
MessageBox.Show(c.Count().ToString());
-
บูลคงที่สาธารณะ RegexIsMatch (สตริงนี้, นิพจน์สตริง, ตัวเลือก System.Text.RegularExpressions.RegexOptions)
บูลคงที่สาธารณะ RegexIsMatch (สตริงนี้ s, นิพจน์สตริง)
System.Text.RegularExpressions.Match RegexMatch สาธารณะแบบคงที่ (สตริงนี้ s, นิพจน์สตริง, ตัวเลือก System.Text.RegularExpressions.RegexOptions)
System.Text.RegularExpressions.Match RegexMatch สาธารณะแบบคงที่ (สตริงนี้ s, นิพจน์สตริง)
System.Text.RegularExpressions.MatchCollection RegexMatches สาธารณะแบบคงที่ (สตริงนี้ s, นิพจน์สตริง, ตัวเลือก System.Text.RegularExpressions.RegexOptions)
System.Text.RegularExpressions.MatchCollection RegexMatches สาธารณะแบบคงที่ (สตริงนี้ s นิพจน์สตริง)
RegexReplace สตริงสาธารณะแบบคงที่ (สตริงนี้, นิพจน์สตริง, ค่าการแทนที่สตริง, ตัวเลือก System.Text.RegularExpressions.RegexOptions)
สตริงคงที่สาธารณะ RegexReplace (สตริงนี้, นิพจน์สตริง, ค่าการแทนที่สตริง)
สตริงคงที่สาธารณะ [] RegexSplit (สตริงนี้, นิพจน์สตริง, ตัวเลือก System.Text.RegularExpressions.RegexOptions)
สตริงคงที่สาธารณะ [] RegexSplit (สตริงนี้ s, นิพจน์สตริง)
ฟังก์ชั่น: การห่อหุ้มฟังก์ชันนิพจน์ทั่วไปที่ใช้กันทั่วไป วิธีการใช้งานจะเหมือนกับคลาส Regex
สาธารณะคงที่ T As<T>(สตริงนี้ s) โดยที่ T : new() ส่วนขยายทั่วไป SpecialString
ส่วนขยายสากลแบบคงที่สาธารณะ HtmlString AsHtmlString (สตริงนี้)
ส่วนขยายสากลแบบคงที่สาธารณะ PathString AsPathString (สตริงนี้)
ส่วนขยายสากลแบบคงที่สาธารณะServerPathString AsServerPathString (สตริงนี้)
ส่วนขยายสากลแบบคงที่สาธารณะ UriString AsUriString (สตริงนี้)
ส่วนขยายสากลแบบคงที่สาธารณะ XHtmlString AsXHtmlString (สตริงนี้)
ส่วนขยายสากลแบบคงที่สาธารณะ XmlString AsXmlString (สตริงนี้)
ฟังก์ชัน: กำหนดเป็นสตริงชนิดพิเศษที่สามารถแก้ไขได้เพิ่มเติมโดยใช้คำสั่งการจัดรูปแบบเฉพาะ (ปัจจุบันฟังก์ชั่นการจัดรูปแบบภายหลังคำจำกัดความค่อนข้างจำกัดและจะทยอยเพิ่มเข้ามาในอนาคต)
ตัวอย่าง:
[วิธีทดสอบ]
โมฆะสาธารณะ TestMethod15()
-
var s = @"C:abc";
var ออก = @"C:abc1.exe";
Assert.AreEqual(ออก, s.AsPathString().Combine(@"D:1.exe".AsPathString().FileName));
-
ส่วนขยายเหล่านี้เป็นส่วนขยายที่ใช้บ่อยที่สุดที่นี่ ฉันหวังว่าส่วนขยายเหล่านี้จะเป็นประโยชน์กับทุกคนเท่าเทียมกัน :)
ดาวน์โหลดซอร์สโค้ดวิธีการขยาย: http://www.uushare.com/user/icesee/file/2435046
ตัวอย่างซอร์สโค้ด: http://www.uushare.com/user/icesee/file/2435063
เวอร์ชัน XPS ของบทความนี้: http://www.uushare.com/user/icesee/file/2435098