天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

自用擴(kuò)展方法分享

image 引言

自從用上擴(kuò)展方法以來,就欲罷不能了,它們大大提升了我的代碼編寫效率,現(xiàn)在我已對其產(chǎn)生了高度依賴。在此分享一下自己的常用擴(kuò)展方法集,方便大家使用。

(其中有些是借鑒或挪用自其它博友的文章,在此尤其感謝鶴沖天的諸多分享)

源代碼在文章末尾處提供。

示例

public static string ExpandAndToString(this System.Collections.IEnumerable s, string 間隔字符)

功能:將集合展開并分別執(zhí)行ToString方法,再以指定的分隔符銜接,拼接成一個(gè)字符串。

范例:

[TestMethod] public void TestMethod1() {     var i = new int[] {1,5,33,14,556 };     var Out="1-5-33-14-556";     Assert.AreEqual(Out,i.ExpandAndToString("-")); }

 

public static bool IsNullOrEmpty(this string s)

功能:驗(yàn)證字符串對象是否為空對象或空字符串。

范例:

[TestMethod]public void TestMethod2(){    string s = null;    Assert.AreEqual(true,s.IsNullOrEmpty());    s += "123";    Assert.AreEqual(false, s.IsNullOrEmpty());}

 

public static string IsNullOrEmptyThen(this string s, System.Func 表達(dá)式)

功能:驗(yàn)證字符串對象是否為空對象或空字符串,如果是的話,則執(zhí)行傳入表達(dá)式,并將表達(dá)式結(jié)果返回。

范例:

[TestMethod]public void TestMethod3(){    var s = "";    var Out = "1234";    Assert.AreEqual(Out, s.IsNullOrEmptyThen(f=>"1234"));}

 

public static void IsNullOrEmptyThen(this string s, System.Action 表達(dá)式)

功能:驗(yàn)證字符串對象是否為空對象或空字符串,如果是的話,則執(zhí)行傳入表達(dá)式。

范例:

[TestMethod]public void TestMethod4(){    var s = "";    s.IsNullOrEmptyThen(f => MessageBox.Show("無內(nèi)容"));}

 

public static string FormatWith(this string s, params object[] 格式化參數(shù))

public static string FormatWith(this string s, object 格式化參數(shù)1)

public static string FormatWith(this string s, object 格式化參數(shù)1, object 格式化參數(shù)2)

public static string FormatWith(this string s, object 格式化參數(shù)1, object 格式化參數(shù)2, object 格式化參數(shù)3)

功能:格式化字符串。

范例:

[TestMethod]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(this T t, params T[] 判斷依據(jù))

功能:判斷當(dāng)前對象是否位于傳入數(shù)組中。

范例:

[TestMethod]public void TestMethod6(){    var i = 95;    Assert.IsTrue(i.In(31, 3, 55, 67, 95, 12, 4));}

 

public static bool In(this T t, System.Func 判斷表達(dá)式, params C[] 判斷依據(jù))

功能:判斷當(dāng)前對象是否位于傳入數(shù)組中,判斷方式由傳入表達(dá)式指定。

范例:

[TestMethod]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(this System.IComparable t, T 最小值, T 最大值)

public static bool InRange(this System.IComparable t, object 最小值, object 最大值)

功能:判斷當(dāng)前值是否介于指定范圍內(nèi)。

范例:

[TestMethod]public void TestMethod8(){    var i = 95;    Assert.IsTrue(i.InRange(15, 100));    Assert.IsTrue(i.InRange(-3000, 300));    Assert.IsFalse(i.InRange(-1, 50));    var s = "b";    Assert.IsTrue(s.InRange("a", "c"));    Assert.IsTrue(s.InRange("1", "z"));    Assert.IsFalse(s.InRange("e", "h"));}

 

public static T Trace(this T t)

public static T Trace(this T t, string 分類)

public static T Trace(this T t, System.Func 表達(dá)式)

public static T Trace(this T t, System.Func 表達(dá)式, string 分類)

功能:將當(dāng)前對象的值輸出到Visual Studio輸出窗口中,并將原始對象返回。此功能僅用于方便調(diào)試,可以在方法鏈中的任意步驟中輸出值,而不會(huì)對方法鏈的連續(xù)性有任何影響。

范例:

[TestMethod]public void TestMethod9(){    var s = "abcdefg".Trace(f => f.ToUpper(), "表達(dá)式模式").Remove(4).Trace("普通模式");    var Out = "abcd";    Assert.AreEqual(Out, s);    //輸出內(nèi)容如下:    //表達(dá)式模式: ABCDEFG    //普通模式: abcd}

public static T TraceFormat(this T t, string 格式化字符串)

public static T TraceFormat(this T t, string 格式化字符串, string 分類)

功能:將當(dāng)前對象的值經(jīng)格式化后輸出到VisualStudio輸出窗口中,并將原始對象返回。此功能僅用于方便調(diào)試,可以在方法鏈中的任意步驟中輸出值,而不會(huì)對方法鏈的連續(xù)性有任何影響。

范例:

[TestMethod]public void TestMethod10(){    var m = Math.Max(0.31, 0.65).TraceFormat("Max Value Is {0}", "格式化模式");    var Out = 0.65;    Assert.AreEqual(Out, m);    //輸出內(nèi)容如下:    //格式化模式: Max Value Is 0.65}

 

public static void ForEach(this System.Collections.Generic.IEnumerable source, System.Action 操作)

public static void ForEach(this System.Collections.Generic.IEnumerable source, System.Action 操作)

功能:遍歷一個(gè)集合,執(zhí)行指定操作。(重載形式中,傳入表達(dá)式的int類型參數(shù)代表當(dāng)前循環(huán)次數(shù))

范例:

[TestMethod]public void TestMethod11(){    var l = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };    var c = 0;    l.ForEach(f => c += f);    var Out = 45;    Assert.AreEqual(Out, c);    l.ForEach((f, i) => c -= i);    Out = 9;    Assert.AreEqual(Out, c);}

 

public static Switch Switch(this T v)

public static Case Switch(this T v, System.Func Do)

功能:判斷當(dāng)前值,根據(jù)不同匹配條件執(zhí)行相應(yīng)操作或返回相應(yīng)的值。(重載形式中,允許通過表達(dá)式對每一次的返回值進(jìn)行疊加處理)
詳細(xì)使用說明參看:《稍加改進(jìn)的Switch/Case擴(kuò)展方法》

范例:

[TestMethod]public void TestMethod12(){    var i = 15;    i.Switch()        .CaseRun(15, f => MessageBox.Show("等于15"),false)        .CaseRun(f => f > 0, f => MessageBox.Show("大于0"))        .CaseRun(f => f < 0, f => MessageBox.Show("小于0"))        .DefaultRun(f => MessageBox.Show("等于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 RecursionSelect(this T o, System.Func> 遞歸項(xiàng)選取表達(dá)式)

public static System.Collections.Generic.IEnumerable RecursionSelect(this T o, System.Func> 遞歸項(xiàng)選取表達(dá)式, System.Predicate 檢驗(yàn)表達(dá)式)

功能:遞歸選取項(xiàng)目,并將最終選定的集合返回。
相關(guān)原理說明參看:《c#擴(kuò)展方法奇思妙用高級篇七:“樹”通用遍歷器》

范例:

[TestMethod]public void TestMethod13(){    //獲取指定目錄中所有包含子目錄的目錄集合    var d = new DirectoryInfo(@"C:/Users/Public/Downloads");    var c = d.RecursionSelect(f => f.GetDirectories(), f => f.GetDirectories().Length > 0);    MessageBox.Show(c.Count().ToString());}

 

public static System.Collections.Generic.IEnumerable RecursionEachSelect(this System.Collections.IEnumerable o, System.Func> 遞歸項(xiàng)選取表達(dá)式)

public static System.Collections.Generic.IEnumerable RecursionEachSelect(this System.Collections.IEnumerable o, System.Func> 遞歸項(xiàng)選取表達(dá)式, System.Predicate 檢驗(yàn)表達(dá)式)

public static System.Collections.Generic.IEnumerable RecursionEachSelect(this System.Collections.Generic.IEnumerable o, System.Func> 遞歸項(xiàng)選取表達(dá)式)

public static System.Collections.Generic.IEnumerable RecursionEachSelect(this System.Collections.Generic.IEnumerable o, System.Func> 遞歸項(xiàng)選取表達(dá)式, System.Predicate 檢驗(yàn)表達(dá)式)

功能:遍歷當(dāng)前集合對象,逐一遞歸選取項(xiàng)目,并將最終選定的集合返回。
相關(guān)原理說明參看:《c#擴(kuò)展方法奇思妙用高級篇七:“樹”通用遍歷器》

范例:

[TestMethod]public void TestMethod14(){    //獲取指定目錄中所有包含子目錄的目錄集合    var l = new List<DirectoryInfo>();    l.Add(new DirectoryInfo(@"C:/Users/SkyD/Downloads"));    l.Add(new DirectoryInfo(@"C:/Users/Public/Downloads"));                var c = l.RecursionEachSelect(f => f.GetDirectories(), f => f.GetDirectories().Length > 0);    MessageBox.Show(c.Count().ToString());}

 

public static bool RegexIsMatch(this string s, string 表達(dá)式, System.Text.RegularExpressions.RegexOptions 選項(xiàng))

public static bool RegexIsMatch(this string s, string 表達(dá)式)

public static System.Text.RegularExpressions.Match RegexMatch(this string s, string 表達(dá)式, System.Text.RegularExpressions.RegexOptions 選項(xiàng))

public static System.Text.RegularExpressions.Match RegexMatch(this string s, string 表達(dá)式)

public static System.Text.RegularExpressions.MatchCollection RegexMatches(this string s, string 表達(dá)式, System.Text.RegularExpressions.RegexOptions 選項(xiàng))

public static System.Text.RegularExpressions.MatchCollection RegexMatches(this string s, string 表達(dá)式)

public static string RegexReplace(this string s, string 表達(dá)式, string 替換值, System.Text.RegularExpressions.RegexOptions 選項(xiàng))

public static string RegexReplace(this string s, string 表達(dá)式, string 替換值)

public static string[] RegexSplit(this string s, string 表達(dá)式, System.Text.RegularExpressions.RegexOptions 選項(xiàng))

public static string[] RegexSplit(this string s, string 表達(dá)式)

功能:常用正則表達(dá)式功能封裝,使用方法與Regex類相同。

public static T As(this string s) where T : new(), 通用擴(kuò)展.SpecialString

public static 通用擴(kuò)展.HtmlString AsHtmlString(this string s)

public static 通用擴(kuò)展.PathString ASPathString(this string s)

public static 通用擴(kuò)展.ServerPathString AsServerPathString(this string s)

public static 通用擴(kuò)展.UriString AsUriString(this string s)

public static 通用擴(kuò)展.XHtmlString AsXHtmlString(this string s)

public static 通用擴(kuò)展.XmlString AsXmlString(this string s)

功能:定義為特殊類型的字符串,以使用特有的格式化命令做進(jìn)一步修改。(目前定義后的后續(xù)格式化功能比較有限,以后會(huì)逐步追加)

范例:

[TestMethod]public void TestMethod15(){    var s = @"C:/abc/";    var Out = @"C:/abc/1.exe";    Assert.AreEqual(Out, s.ASPathString().Combine(@"D:/1.exe".ASPathString().FileName));}

 

結(jié)語

這些都是我這里使用頻率最高的擴(kuò)展,希望對大家也同樣有用:)

下載

擴(kuò)展方法源代碼: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

NET技術(shù)自用擴(kuò)展方法分享,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 97久久伊人精品影院 | 亚洲精品成人久久久影院 | 99国产在线精品视频 | 亚洲中文无码亚洲人在线观看- | 男插女高潮一区二区 | 在线色av| 高hh乱亲女真实 | 国产精品 中文字幕 亚洲 欧美 | 欧美老少欢杂交另类 | 久久这里只有精品国产99 | 外国三级片名 | 亚洲精品偷拍影视在线观看 | 张津瑜的9分58秒7段免费 | 青柠电影高清在线观看 | 在线播放av欧美无码碰 | 久久在精品线影院 | 亚洲一区二区三区乱码在线欧洲 | 欧美性动漫3d在线观看完整版 | 健身房被教练啪到腿软H | 久 久 亚洲 少 妇 无 码 | 女人爽得直叫免费视频 | 双腿打开揉弄高潮H苏安安秦慕深 | 蜜桃成熟时2电影免费观看d | 妺妺窝人体色WWW偷窥女厕 | 久久受www免费人成_看片中文 | 中国拍三a级的明星女 | 99热都是精品 | 国产精品亚洲精品久久国语 | 免费视频xxx| 小妇人电影免费完整观看2021 | 语文老师扒开胸罩喂我奶 | 日本69色视频在线观看 | 2020年国产精品午夜福利在线观看 | 正在播放国产尾随丝袜美女 | 国产永久免费视频 | 欧美亚洲精品午夜福利AV | 国产视频这里只有精品 | 又粗又大又爽又黄的免费视频 | 91日本在线观看亚洲精品 | 国产午夜视频在永久在线观看 | 亚洲精品在线播放视频 |