Func和Action

旧巷老猫 提交于 2020-04-03 13:24:12

 

Func委托

封装一个带有返回 TResult 参数指定的类型值的方法,它有5个重载:

·Func<TResult>         

·Func<T,TResult>    

·Func<T1,T2,TResult>  

·Func<T1,T2,T3,TResult> 

·Func<T1,T2,T3,T4,TResult> 

这里用一个举例说明:以Func<T,TR>这个来说明。这个从根源讲要说到委托(delegate)。这个方法的意义是有一个T参数,且返回值类型为TR类型的方法。

1)按常规来做的方法为

定义一个返回bool的方法。

public bool IsTen(int i)
{
    
return i == 10 ? true : false;
}

 

 

测试

[Test]
public void TestFun1()
{
    Assert.AreEqual(
true, IsTen(10));
}

 

 

2)通过委托来实现

delegate bool IsTenDelegate(int i);

public bool IsTen(int i)
{
    
return i == 10 ? true : false;
}

[Test]
public void TestFun1()
{
    
//IsTenDelegate d = IsTen;
    IsTenDelegate d = new IsTenDelegate(IsTen);
    Assert.AreEqual(
true, d(10));
}

 

这里把方法IsTen委托给了委托类型IsTenDelegate。以下是2.0中匿名方法的实现

3)匿名方法

[Test]
public void TestFun1()
{
   IsTenDelegate  d
= delegate(int i) 
    {
       
return i == 10 ? true : false;
    };

    Assert.AreEqual(
true, d(10));
}

 

通过匿名方法内联方式实现了委托IsTenDelegate  。然后在3.*版本中,通过lambda表达式成为内联委托的首选方法

4Lambda

 

[Test]
public void TestFun1()
{
    IsTenDelegate d 
= x => x == 10 ? true : false;
    Assert.AreEqual(
true, d(10));
}

 

关于Lambda的内容请见我的另一篇随笔:

http://www.cnblogs.com/jams742003/archive/2009/12/23/1630737.html

5Func<T>

public delegate TResult Func<TResult>()

 

 

这里Func<T>的方法定义,它是一个delegate,所以,上边的IsTenDelegate 委托可以写成:

Func<intbool> d = x => x == 10 ? true : false;
Assert.AreEqual(
true, d(10));

 

这就是Func,它带有返回值,且有5种重载,可以委托0-4个参数的方法。

Action<T>则与Func意义相近,只是不带返回值。

 

 

Action委托

封装一个方法,该方法不返回值

Action

Action<T>

Action<T1,T2>

Action<T1,T2,T3>

Action<T1,T2,T3,T4>

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!