مقدمة منذ أن بدأت في استخدام طرق الامتداد، لم أستطع التوقف عن استخدامها، لقد حسنت بشكل كبير من كفاءة كتابة التعليمات البرمجية الخاصة بي، والآن أصبحت أعتمد عليها بشكل كبير. أرغب في مشاركة طريقة الامتداد شائعة الاستخدام التي تم تعيينها هنا لراحة الجميع.
(تم استعارة بعضها أو تخصيصها من مقالات مدونين آخرين. أود أن أشكر بشكل خاص He Chongtian على مشاركاته العديدة)
يتم توفير كود المصدر في نهاية المقال.
مثال
سلسلة ثابتة عامة ExpandAndToString (هذا System.Collections.IEnumerable s، حرف فاصل السلسلة)
الوظيفة: قم بتوسيع المجموعة وتنفيذ طريقة ToString على التوالي، ثم قم بتوصيلها بالمحدد المحدد لربطها في سلسلة.
مثال:
[طريقة الاختبار]
الفراغ العام TestMethod1 ()
{
var i = new int[] {1,5,33,14,556};
فار أوت = "1-5-33-14-556";
Assert.AreEqual(Out,i.ExpandAndToString("-"));
}
المنطق المنطقي العام الثابت IsNullOrEmpty (هذه السلسلة)
الوظيفة: التحقق مما إذا كان كائن السلسلة كائنًا فارغًا أم سلسلة فارغة.
مثال:
[طريقة الاختبار]
الفراغ العام TestMethod2 ()
{
سلسلة ق = فارغة؛
Assert.AreEqual(true,s.IsNullOrEmpty());
ق += "123";
Assert.AreEqual(false, s.IsNullOrEmpty());
}
السلسلة الثابتة العامة IsNullOrEmptyThen (هذه السلسلة s، System.Func<string,string> Expression)
الوظيفة: التحقق مما إذا كان كائن السلسلة كائنًا فارغًا أم سلسلة فارغة. إذا كان الأمر كذلك، فقم بتنفيذ التعبير الوارد وإرجاع نتيجة التعبير.
مثال:
[طريقة الاختبار]
الفراغ العام TestMethod3 ()
{
فارس = "";
فار خارج = "1234";
Assert.AreEqual(Out, s.IsNullOrEmptyThen(f=>"1234"));
}
الفراغ العام الثابت IsNullOrEmptyThen (هذه السلسلة s، System.Action<string> التعبير)
الوظيفة: التحقق مما إذا كان كائن السلسلة كائنًا فارغًا أم سلسلة فارغة، وإذا كان الأمر كذلك، فقم بتنفيذ التعبير الوارد.
مثال:
[طريقة الاختبار]
الفراغ العام TestMethod4 ()
{
فارس = "";
s.IsNullOrEmptyThen(f => messageBox.Show("لا يوجد محتوى"));
}
سلسلة ثابتة عامة FormatWith (هذه السلسلة، كائن المعلمات [] معلمات التنسيق)
سلسلة ثابتة عامة FormatWith (هذه السلسلة، معلمة تنسيق الكائن 1)
سلسلة ثابتة عامة FormatWith (هذه السلسلة، معلمة تنسيق الكائن 1، معلمة تنسيق الكائن 2)
سلسلة ثابتة عامة FormatWith (هذه السلسلة، معلمة تنسيق الكائن 1، معلمة تنسيق الكائن 2، معلمة تنسيق الكائن 3)
الوظيفة: تنسيق السلسلة.
مثال:
[طريقة الاختبار]
الفراغ العام TestMethod5 ()
{
فار ط = 0.35؛
فار س = 200؛
var Out = "i:35%;x:200;";
Assert.AreEqual(Out, "i:{0:0%};x:{1};".FormatWith(i,x));
}
المنطق المنطقي العام الثابت <T> (هذا T t، أساس الحكم المعلمات T [])
الوظيفة: تحديد ما إذا كان الكائن الحالي موجودًا في المصفوفة الواردة.
مثال:
[طريقة الاختبار]
الفراغ العام TestMethod6 ()
{
فار ط = 95؛
Assert.IsTrue(i.In(31, 3, 55, 67, 95, 12, 4));
}
المنطق المنطقي العام الثابت في<T, C>(هذا T t, System.Func<T,C,bool> تعبير الحكم، أساس الحكم Params C[])
الوظيفة: تحديد ما إذا كان الكائن الحالي موجودًا في المصفوفة الواردة أم لا. يتم تحديد طريقة الحكم من خلال التعبير الوارد.
مثال:
[طريقة الاختبار]
الفراغ العام TestMethod7 ()
{
فار ط = 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 ()
{
فار ط = 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)
تتبع T ثابت عام<T>(هذا T t، تصنيف السلسلة)
تتبع T ثابت عام<T>(هذا التعبير T t, System.Func<T,object>)
تتبع T ثابت عام<T>(تعبير T t، System.Func<T,object>، تصنيف السلسلة)
الوظيفة: إخراج قيمة الكائن الحالي إلى نافذة إخراج Visual Studio وإرجاع الكائن الأصلي. تُستخدم هذه الوظيفة فقط لتسهيل تصحيح الأخطاء، ويمكن إخراج القيم في أي خطوة في سلسلة الطريقة دون أي تأثير على استمرارية سلسلة الطريقة.
مثال:
[طريقة الاختبار]
الفراغ العام TestMethod9 ()
{
var s = "abcdefg".Trace(f => f.ToUpper(), "وضع التعبير").Remove(4).Trace("الوضع العادي");
فار خارج = "abcd";
Assert.AreEqual(Out, s);
// محتوى الإخراج كما يلي:
// نمط التعبير: ABCDEFG
// الوضع العادي: abcd
}
T TraceFormat العام الثابت<T>(سلسلة تنسيق السلسلة هذه T t)
TraceFormat T العام الثابت<T>(هذا T t، سلسلة تنسيق السلسلة، تصنيف السلسلة)
الوظيفة: إخراج قيمة الكائن الحالي إلى نافذة إخراج Visual Studio بعد التنسيق، وإرجاع الكائن الأصلي. تُستخدم هذه الوظيفة فقط لتسهيل تصحيح الأخطاء، ويمكن إخراج القيم في أي خطوة في سلسلة الطريقة دون أي تأثير على استمرارية سلسلة الطريقة.
مثال:
[طريقة الاختبار]
الفراغ العام TestMethod10 ()
{
var m = Math.Max(0.31, 0.65).TraceFormat("القيمة القصوى هي {0}"، "وضع التنسيق");
فاروت = 0.65;
Assert.AreEqual(Out, m);
// محتوى الإخراج كما يلي:
// وضع التنسيق: القيمة القصوى هي 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 = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
فار ج = 0;
l.ForEach(f => c += f);
فاروت = 45;
Assert.AreEqual(Out, c);
l.ForEach((f, i) => c -= i);
خارج = 9؛
Assert.AreEqual(Out, c);
}
التبديل الثابت العام<T> التبديل<T>(هذا T v)
الحالة الثابتة العامة<T,R> التبديل<T, R>(هذا T v, System.Func<R,R,R> Do)
الوظيفة: تحديد القيمة الحالية وإجراء العمليات المقابلة أو إرجاع القيم المقابلة وفقًا لشروط المطابقة المختلفة. (في النموذج المحمل بشكل زائد، يُسمح بتراكب كل قيمة إرجاع من خلال التعبيرات)
للحصول على تعليمات مفصلة، يرجى الرجوع إلى: "طريقة تمديد التبديل/الحالة المحسنة قليلاً"
مثال:
[طريقة الاختبار]
الفراغ العام TestMethod12 ()
{
فار ط = 15؛
ط.التبديل ()
.CaseRun(15, f => messageBox.Show("يساوي 15"),خطأ)
.CaseRun(f => f > 0, f => messageBox.Show("أكبر من 0"))
.CaseRun(f => f < 0, f => messageBox.Show("أقل من 0"))
.DefaultRun(f => messageBox.Show("يساوي 0"));
فار o = 'c'.Switch()
.CaseReturn('a', 1)
.CaseReturn('ب', 2)
.CaseReturn('c', 3)
.CaseReturn('d', 4)
.CaseReturn(f => f > 'd', 5)
.DefaultReturn(0).ReturnValue;
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().Length > 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>(هذا 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 = 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());
}
المنطق المنطقي العام RegexIsMatch (هذه السلسلة، تعبير السلسلة، خيار System.Text.RegularExpressions.RegexOptions)
المنطق المنطقي العام RegexIsMatch (هذه السلسلة، تعبير السلسلة)
System.Text.RegularExpressions.Match العام الثابت RegexMatch (هذه السلسلة، تعبير السلسلة، خيارات System.Text.RegularExpressions.RegexOptions)
System.Text.RegularExpressions.Match العام الثابت RegexMatch (هذه السلسلة، تعبير السلسلة)
System.Text.RegularExpressions.MatchCollection RegexMatches ثابت عام (هذه السلسلة، تعبير السلسلة، خيارات System.Text.RegularExpressions.RegexOptions)
ثابت عام System.Text.RegularExpressions.MatchCollection RegexMatches (هذه السلسلة، تعبير السلسلة)
سلسلة ثابتة عامة RegexReplace (هذه السلسلة، تعبير السلسلة، قيمة استبدال السلسلة، خيار System.Text.RegularExpressions.RegexOptions)
سلسلة ثابتة عامة RegexReplace (هذه السلسلة، تعبير السلسلة، قيمة استبدال السلسلة)
سلسلة ثابتة عامة [] RegexSplit (هذه السلسلة، تعبير السلسلة، خيارات System.Text.RegularExpressions.RegexOptions)
سلسلة ثابتة عامة [] RegexSplit (هذه السلسلة، تعبير السلسلة)
الوظيفة: تغليف دالة التعبير العادي شائعة الاستخدام، وطريقة الاستخدام هي نفس فئة Regex.
T عام ثابت كـ<T>(هذه السلسلة s) حيث T : new(), ملحق عام.SpecialString
الامتداد العالمي الثابت العام.HtmlString AsHtmlString (هذه السلسلة)
الامتداد العالمي الثابت العام.PathString AsPathString (هذه السلسلة)
الامتداد العالمي الثابت العام.ServerPathString AsServerPathString (هذه السلسلة)
الامتداد العالمي الثابت العام.UriString AsUriString (هذه السلسلة)
الامتداد العالمي الثابت العام.XHtmlString AsXHtmlString (هذه السلسلة)
الامتداد العالمي الثابت العام.XmlString AsXmlString (هذه السلسلة)
الوظيفة: يتم تعريفها كنوع خاص من السلسلة التي يمكن تعديلها بشكل أكبر باستخدام أوامر التنسيق الفريدة. (حاليًا، وظائف التنسيق اللاحقة بعد التعريف محدودة نسبيًا وستتم إضافتها تدريجيًا في المستقبل)
مثال:
[طريقة الاختبار]
الفراغ العام TestMethod15 ()
{
var s = @"C:abc";
var Out = @"C:abc1.exe";
Assert.AreEqual(Out, 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