程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 針對比具體類型更高層次的抽象編寫擴展方法例子

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

編輯:C#入門知識

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

 

  判斷集合是否包含元素

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");

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved