再談.NET委托(delegate、Func<>)
阿新 • • 發佈:2018-10-08
假設 object where nbsp 所有 lam 結果 負責 tac
示例三:
//或者使用系統現有的委托Func<>,結合lambda表達式
Func<int, bool> d = p => p == 10 ? true : false;
Console.WriteLine(d(10)); //true
示例四:
//或者也可以這麽寫
Func<int, bool> d = delegate(int i) { return i == 10 ? true : false; };
Console.WriteLine(d(10)); //true
-------------- 高端大氣上檔次的分割線 --------------------
下面我們來看一個Func<>委托的實際應用場景:
//假設有一個Model
public class TModel
{
public int ID { get; set; }
public string Name { get; set; }
public List<string> Friends { get; set; }
}
//提供一個處理單個Model數據的方法模板,返回方法集合
public static List<Func<TModel, object, object>> DataConver()
{
List<Func<TModel, object, object>> list = new List<Func<TModel, object, object>>();
list.Add((t, p) => t.ID = (int)p);
list.Add((t, p) => t.Name = p.ToString());
return list;
}
//利用方法集合處理數據,並返回結果數據
//此方法為一個泛型方法,接受類型參數T
public static List<T> GetData<T>(List<Func<T, object, object>> dataMaker) where T:class,new()
{
List<T> lst = new List<T>();
T t = new T();
for (int i = 0; i < dataMaker.Count; i++)
{
//因為dataMaker是方法集合,而每個方法都負責處理T中的一個成員,
//這裏假設所有方法的第二個參數都是123,
//具體應用場景應該是根據T對應的成員類型做不同的轉換。
dataMaker[i](t, 123);
}
lst.Add(t);
return lst;
}
//調用
List<TModel> list = GetData<TModel>(DataConver());
為了演示委托,我們先來定義一個方法:
public static bool IsTen(int i)
{
return i == 10 ? true : false;
}
如果要用自定義委托,則需要聲明:
delegate bool IsTenDelegate(int i);
示例一:
//這是最基本的寫法
IsTenDelegate d = new IsTenDelegate(IsTen);
Console.WriteLine(d(10)); //true
示例二:
//自定義匿名委托
IsTenDelegate d = delegate(int i) { return i == 10 ? true : false; };
Console.WriteLine(d(10)); //true
示例三:
//或者使用系統現有的委托Func<>,結合lambda表達式
Func<int, bool> d = p => p == 10 ? true : false;
Console.WriteLine(d(10)); //true
示例四:
//或者也可以這麽寫
Func<int, bool> d = delegate(int i) { return i == 10 ? true : false; };
Console.WriteLine(d(10)); //true
-------------- 高端大氣上檔次的分割線 --------------------
下面我們來看一個Func<>委托的實際應用場景:
public class TModel
{
public int ID { get; set; }
public string Name { get; set; }
public List<string> Friends { get; set; }
}
//提供一個處理單個Model數據的方法模板,返回方法集合
public static List<Func<TModel, object, object>> DataConver()
{
List<Func<TModel, object, object>> list = new List<Func<TModel, object, object>>();
list.Add((t, p) => t.Name = p.ToString());
return list;
}
//利用方法集合處理數據,並返回結果數據
//此方法為一個泛型方法,接受類型參數T
public static List<T> GetData<T>(List<Func<T, object, object>> dataMaker) where T:class,new()
{
List<T> lst = new List<T>();
T t = new T();
for (int i = 0; i < dataMaker.Count; i++)
{
//因為dataMaker是方法集合,而每個方法都負責處理T中的一個成員,
//這裏假設所有方法的第二個參數都是123,
//具體應用場景應該是根據T對應的成員類型做不同的轉換。
dataMaker[i](t, 123);
}
lst.Add(t);
return lst;
}
//調用
List<TModel> list = GetData<TModel>(DataConver());
再談.NET委托(delegate、Func<>)