首页 > 编程知识 正文

fun的用法,func方法

时间:2023-05-06 09:05:16 阅读:285680 作者:2325

What is Func?

Func 是指定参数的委托. 在 C#, 一个委托指向了一个方法. 当调用者执行委托时,调用者称之为它的目标方法. 目标方法在某些时候可以为我们提供灵活性并让事情变得简单。

我们可以使用Func委托呈现一个没有显式声明参数的自定义委托方法。
delegate TResult Func <out TResult> ();delegate TResult Func <in T, out TResult> (T arg);<span style="color: rgb(17, 17, 17); font-family: 'Segoe UI', Arial, sans-serif; font-size: 14px;">…and then if we want to print the numbers which will have result less than 1 after divided by 5, we will write a method:</span>delegate TResult Func <in T1, in T2, out TResult> (T1 arg1, T2 arg2);... and so on, up to T16 The Problem

为了理解Func, 我们必须知道它能处理什么问题. 假如我们有一int型数组.

IEnumerable<int> numbers = new[] {3, 4, 7, 1, 8, 10, 21, 5, 9, 11, 14, 19}; 这是一个简单的数组. 假如我们要打印大于是10的数字 , 我们会写下下面的方法. 我们将以上面的数组为参数并且输出一个新的大于10数字的数组。
public IEnumerable<int> GetGreaterThanTen(IEnumerable<int> numbers){ foreach (int number in numbers) if (number > 10) yield return number;} 假如我们要打印除于5的余数大于1的数,我们会写下一个方法: public IEnumerable<int> GetGreterThanOneAfterDevidedByFive(IEnumerable<int> numbers){ foreach (int number in numbers) if ((number/5) > 1) yield return number;} The Solution 根据上面的方法, 我们会以条件的不同写出不同的方法. 但是我们有更好的方法. 我们应该用委托来避免来写的新的方法. 用  Func 作为方法参数将脱离调用者  和函数. Func  将会传递函数体的规则.
public IEnumerable<int> GetNumbers(IEnumerable<int> numbers, Func<int, bool> numberResolver){ foreach (int number in numbers) if (numberResolver(number)) yield return number;}IEnumerable<int> numbers = new[] {3, 4, 7, 1, 8, 10, 21, 5, 9, 11, 14, 19};IEnumerable<int> greaterThanTen = GetNumbers(numbers, x=>x>10);greaterThanTen.ToList().ForEach(Console.WriteLine);Console.WriteLine("n");IEnumerable<int> greaterThanOneAfterDividedByFive = GetNumbers(numbers, n => (n/5) > 1);greaterThanOneAfterDividedByFive.ToList().ForEach(Console.WriteLine); 上面的代码是相当自我解释的。 函数 使用 lambda表达式(Lambda expression), 它本质上是 一个匿名函数 。
Getting TResult The x-factor of  Func  is probably  Func<TResult> . For  func tional programming, 返回类型有很大的作用. For example: IEnumerable<int> numbers = new[] { 3, 4, 7, 1, 8, 10, 21, 5, 9, 11, 14, 19 };Func<IEnumerable<int>, IEnumerable<int>> getGreaterThanTen = nums => { var array = new List<int>(); nums.ToList().ForEach(x => { if (x > 10) array.Add(x); }); return array;};var result = getGreaterThanTen(numbers);result.ToList().ForEach(Console.WriteLine); 翻译地址


版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。