亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

自用擴展方法分享

2019-11-17 03:52:09
字體:
來源:轉載
供稿:網友
 引言
自從用上擴展方法以來,就欲罷不能了,它們大大提升了我的代碼編寫效率,現在我已對其產生了高度依賴。在此分享一下自己的常用擴展方法集,方便大家使用。

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

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



示例


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

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

范例:

[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)

功能:驗證字符串對象是否為空對象或空字符串。

范例:

[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<string,string> 表達式)

功能:驗證字符串對象是否為空對象或空字符串,如果是的話,則執行傳入表達式,并將表達式結果返回。

范例:

[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<string> 表達式)

功能:驗證字符串對象是否為空對象或空字符串,如果是的話,則執行傳入表達式。

范例:

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


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

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

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

public static string FormatWith(this string s, object 格式化參數1, object 格式化參數2, object 格式化參數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<T>(this T t, params T[] 判斷依據)

功能:判斷當前對象是否位于傳入數組中。

范例:

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


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

功能:判斷當前對象是否位于傳入數組中,判斷方式由傳入表達式指定。

范例:

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

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

功能:判斷當前值是否介于指定范圍內。

范例:

[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<T>(this T t)

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

public static T Trace<T>(this T t, System.Func<T,object> 表達式)

public static T Trace<T>(this T t, System.Func<T,object> 表達式, string 分類)

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

范例:

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


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

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

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

范例:

[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);
    //輸出內容如下:
    //格式化模式: Max Value Is 0.65
}


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

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

功能:遍歷一個集合,執行指定操作。(重載形式中,傳入表達式的int類型參數代表當前循環次數)

范例:

[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<T> Switch<T>(this T v)

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

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

范例:

[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<T> RecursionSelect<T>(this T o, System.Func<T,IEnumerable<T>> 遞歸項選取表達式)

public static System.Collections.Generic.IEnumerable<T> RecursionSelect<T>(this T o, System.Func<T,IEnumerable<T>> 遞歸項選取表達式, System.PRedicate<T> 檢驗表達式)

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

范例:

[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<T> RecursionEachSelect<T>(this System.Collections.IEnumerable o, System.Func<T,IEnumerable<T>> 遞歸項選取表達式)

public static System.Collections.Generic.IEnumerable<T> RecursionEachSelect<T>(this System.Collections.IEnumerable o, System.Func<T,IEnumerable<T>> 遞歸項選取表達式, System.Predicate<T> 檢驗表達式)

public static System.Collections.Generic.IEnumerable<T> RecursionEachSelect<T>(this System.Collections.Generic.IEnumerable<T> o, System.Func<T,IEnumerable<T>> 遞歸項選取表達式)

public static System.Collections.Generic.IEnumerable<T> RecursionEachSelect<T>(this System.Collections.Generic.IEnumerable<T> o, System.Func<T,IEnumerable<T>> 遞歸項選取表達式, System.Predicate<T> 檢驗表達式)

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

范例:

[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 表達式, System.Text.RegularExpressions.RegexOptions 選項)

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

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

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

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

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

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

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

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

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

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



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

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

public static 通用擴展.PathString aspathString(this string s)

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

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

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

public static 通用擴展.xmlString AsXmlString(this string s)

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

范例:

[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));
}


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



下載
擴展方法源代碼: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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产福利精品在线| 欧美激情中文网| 久久精品亚洲一区| 亚洲精品久久久久久久久久久久| 国产欧美日韩中文| 久久手机精品视频| 亚洲欧美一区二区三区久久| 欧美激情精品久久久久久免费印度| 91精品美女在线| 日本最新高清不卡中文字幕| 91精品国产色综合久久不卡98口| 亚洲精品国产精品国自产在线| 尤物tv国产一区| 久久久久久久久久国产精品| 亚洲色图偷窥自拍| 成人xvideos免费视频| 久久伊人精品一区二区三区| 久久99热这里只有精品国产| 欧美激情性做爰免费视频| 日本免费在线精品| 91日本视频在线| 国产精品日韩在线播放| 国产精品福利久久久| 亚洲精品按摩视频| 日韩女优在线播放| 精品久久久999| 精品av在线播放| 国产日韩欧美夫妻视频在线观看| 91精品国产色综合| 国产精品99免视看9| 国产欧美一区二区三区四区| 久久综合久久八八| 亚洲国产日韩欧美在线99| 国产精品视频免费在线观看| 日本精品久久久久影院| 久久综合国产精品台湾中文娱乐网| 久色乳综合思思在线视频| 91欧美精品午夜性色福利在线| 国产精品一区二区三区毛片淫片| 精品欧美一区二区三区| 不用播放器成人网| 日韩精品视频在线播放| 国产在线播放不卡| 在线观看视频99| 91免费观看网站| 亚洲国产精品嫩草影院久久| 国产亚洲美女久久| 日日狠狠久久偷偷四色综合免费| 91精品久久久久久久久青青| 国产成人精品综合久久久| 欧美成人在线免费视频| 亚洲国产天堂久久综合| 国产精品视频在线播放| 国产成人一区二区| 亚洲精品国产精品国自产在线| 欧美成人一区二区三区电影| 久久中文久久字幕| 欧美日韩精品在线视频| 欧美激情女人20p| 欧美视频一区二区三区…| 亚洲天堂免费观看| 亚洲电影免费观看高清完整版| 精品亚洲一区二区三区四区五区| 国语自产精品视频在线看抢先版图片| 久热国产精品视频| 久热精品视频在线观看| 亚洲va欧美va在线观看| 中文字幕综合在线| 91精品国产91久久久久福利| 国内成人精品视频| 日韩禁在线播放| 精品日本高清在线播放| 国产精品久久久久久av福利| 久久中文字幕国产| 亚洲精品97久久| 国产91精品网站| 国产欧美婷婷中文| 国产日韩av在线| 日韩精品www| 国产精品电影在线观看| 久久免费视频观看| 国产精品视频男人的天堂| 国产精品极品美女在线观看免费| 亚洲欧美制服另类日韩| 亚洲va久久久噜噜噜久久天堂| 91国产美女视频| 国产精品青草久久久久福利99| 亚洲国产婷婷香蕉久久久久久| 久久久久久久色| 上原亚衣av一区二区三区| 国产日产亚洲精品| 亚洲男人天堂2024| 午夜美女久久久久爽久久| 成人有码视频在线播放| 久热精品视频在线| 国产成人亚洲综合91精品| 亚洲第一色中文字幕| 亚洲国产精品福利| 亚洲人成网7777777国产| 6080yy精品一区二区三区| 主播福利视频一区| 日本欧美精品在线| 亚洲娇小xxxx欧美娇小| 久久久av亚洲男天堂| 亲爱的老师9免费观看全集电视剧| 国产精品永久免费观看| 久久成人这里只有精品| 久久精视频免费在线久久完整在线看| 亚洲精品aⅴ中文字幕乱码| 色婷婷av一区二区三区在线观看| 91色视频在线导航| 国产精品扒开腿做爽爽爽男男| www.美女亚洲精品| 久久综合国产精品台湾中文娱乐网| 亚洲欧美综合区自拍另类| 欧美在线免费看| 国产精品黄色影片导航在线观看| 国产99视频精品免视看7| 欧美日韩精品国产| 精品少妇v888av| 97久久精品人人澡人人爽缅北| 欧美精品18videos性欧美| 久久视频国产精品免费视频在线| 欧美一级大片在线免费观看| 深夜福利国产精品| 久久国产精品免费视频| 亚洲第一精品夜夜躁人人爽| 国产一区二区精品丝袜| 亚洲人成网7777777国产| 97热在线精品视频在线观看| 国产视频精品在线| 久久夜色精品国产| 国模私拍一区二区三区| 日韩电影在线观看免费| 亚洲色图35p| 日本欧美中文字幕| 日韩成人av在线播放| 懂色av影视一区二区三区| 国产亚洲欧美另类中文| 久久亚洲精品毛片| 久久男人av资源网站| 国产suv精品一区二区三区88区| 中文字幕精品—区二区| 欧美另类99xxxxx| 国产999精品视频| 日韩欧美成人区| 色爱av美腿丝袜综合粉嫩av| 奇米影视亚洲狠狠色| 欧美网站在线观看| 国产精品美女免费| 中文字幕欧美亚洲| 国产精品久久久久久五月尺| 欧美亚洲视频一区二区| 69av成年福利视频| 久久免费视频网站| 国产精品第七十二页| 91精品国产免费久久久久久| 精品亚洲一区二区三区在线观看| 国产精品久久久久久久久久新婚| 宅男66日本亚洲欧美视频| 亚洲片在线资源| 国产精品久久久久久久久久久久| 国产精品九九久久久久久久| 日韩精品免费在线|