.NET自带泛型委托方法Func、Action和Predicate

    Func、Action和Predicate是.NET自带的3个泛型委托方法,三个方法的区别其实并不大,要强行给混着用也是可以的,但是我们是有追求的人,把道理讲清楚总是好的。

 

一、Func是有返回值的方法(类似于Delphi里面的function),Func最多支持16个泛型参数和1个泛型返回值(最后一个固定为返回值),并且支持Lambda表达式

//无参数用法
Func<string> funcNone = delegate()
{
    return "我是来打酱油的";
};
//无参数Lambda用法
Func<string> funcNoneLambda = () => "我是来打酱油的";

//一个参数用法
Func<string, bool> funcOne = delegate(string s)
{
    return s.Contains("酱油");
};
//一个参数Lambda用法
Func<string, bool> funcOneLambda = s => s.Contains("酱油");

//两个参数用法
Func<int, int, int> funcTwo = delegate(int one, int two)
{
    return one + two;
};
//两个参数Lambda用法
Func<int, int, int> funcTwoLambda = (one, two) => one + two;

二、Action是无返回值的方法(类似于Delphi里面的procedure),Action也是最多支持16个泛型参数,并且支持Lambda表达式

//一个参数用法        
Action<string> actionOne = delegate(string s)
{
    Console.Write(s);
};
//一个参数Lambda用法
Action<string> actionOneLambda = c => Console.Write(c);

三、Predicate比较特殊,它只有一个参数,而且只返回一个布尔值,并且支持Lambda表达式

//Predicate用法
Predicate<string[]> predicate = delegate(string[] s)
{
    var result = from p in s where p.Contains("c") select p;
    return result.ToList().Count > 0 ? true : false;
};

//Predicate Lambda用法
Predicate<string[]> predicateLambda = s =>
{
    var result = from p in s where p.Contains("c") select p;
    return result.ToList().Count > 0 ? true : false;
};

 

posted @ 2017-05-31 13:47  TanSea  阅读(1358)  评论(0编辑  收藏  举报