国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

針對比具體類型更高層次的抽象編寫擴展方法例子

2019-11-17 03:05:59
字體:
來源:轉載
供稿:網友

針對比具體類型更高層次的抽象編寫擴展方法例子

針對某個類型,如果我們不想或不能改變其內部,但想為該類型添加方法,我們可以使用擴展方法來實現。如果該類型有更高層次的抽象,比如接口,我們應為更高層次類型編寫擴展方法。另外,擴展方法是鏈式編程的前提。

判斷集合是否包含元素

List<int> list = new List<int>();if(list != null && list.Count > 0){    }

我們可以針對比int類型更高層次的ICollection接口寫一個擴展方法:

public static bool HasElements(this ICollection list){    return list != null && list.Count > 0}

然后可以這樣使用:

List<int> list = new List<int>();if(list.HasElements()){    }

判斷一個值是否在2個大小數之間

public class A : IComparable{}public class B : IComparable{}public class C : IComparable{}public bool IsBetween(A a, B b, C c){    return a.CompareTo(b) >=0 && c.CompareTo(c) <= 0;}

我們可以針對比某個具體類更高層次的IComparable接口寫一個擴展方法:

public static bool IsBetween<T>(this T value, T min, T max) where T : IComparable<T>{    return value.CompareTo(min) >= 0 && value.CompareTo(max) <= 0;}

可以這樣使用:

int a = 10;a.IsBetween(1,8);

針對集合中的每一個元素實施相同的方法

List<string> strList = new List<string>();foreach(var item in strList){    SomeMethod(item);}

首先,可以針對比string更高層次抽象的ICollection編寫擴展方法,其次,遍歷元素執行的方法抽象成一個委托參數。如下:

public static void EachMethod<T>(this ICollection<T> items, Action<T> action){    foreach(T item in items)    {        action(item);    }}

現在可以這樣使用:

List<string> strList = new List<string>();strList.EachMethod(s => {    Console.WriteLine(s);});

判斷元素是否包含在集合中

string str = "a";List<string> strs = new List<string>(){"a", "b"};if(strs.Contains(str)){    //TODO:}

可以針對比string更高層次抽象的泛型類型編寫擴展方法:

public static bool In<T>(this T source, params T[] list){    if(source == null) throw new ArgumentNulllException("source");    return list.Contains(source);}

這樣使用:

string temp = "a";temp.In("a","b");

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 榆社县| 嫩江县| 黎平县| 日照市| 永顺县| 双辽市| 达州市| 饶阳县| 明溪县| 仁怀市| 富裕县| 南靖县| 南城县| 仲巴县| 洛川县| 蓬莱市| 屯留县| 绵阳市| 高青县| 肃南| 吉林市| 正宁县| 禹州市| 囊谦县| 利辛县| 文昌市| 宜川县| 临夏市| 罗平县| 贵溪市| 盈江县| 克拉玛依市| 乐陵市| 义乌市| 昌平区| 阿克苏市| 大渡口区| 交城县| 克山县| 瑞安市| 株洲县|