我能找到的关于 Func<> 和 Action<> 的所有示例都简单,如下图所示,您可以看到它们如何在技术上如何工作,但我想看到它们在解决以前无法解决或只能以更复杂的方式解决的问题的示例中使用,即我知道它们的工作原理并且我可以看到它们简洁而强大,所以我想从更广泛的意义上了解它们,了解它们解决了哪些类型的问题,以及我如何在应用程序设计中使用它们。
您在哪些方面(模式)使用 Func<> 和 Action<> 来解决实际问题?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TestFunc8282
{
class Program
{
static void Main(string[] args)
{
//func with delegate
Func<string, string> convert = delegate(string s)
{
return s.ToUpper();
};
//func with lambda
Func<string, string> convert2 = s => s.Substring(3, 10);
//action
Action<int,string> recordIt = (i,title) =>
{
Console.WriteLine("--- {0}:",title);
Console.WriteLine("Adding five to {0}:", i);
Console.WriteLine(i + 5);
};
Console.WriteLine(convert("This is the first test."));
Console.WriteLine(convert2("This is the second test."));
recordIt(5, "First one");
recordIt(3, "Second one");
Console.ReadLine();
}
}
}
最佳答案
它们对于重构 switch 语句也很方便。
以下面(虽然简单)为例:
public void Move(int distance, Direction direction)
{
switch (direction)
{
case Direction.Up :
Position.Y += distance;
break;
case Direction.Down:
Position.Y -= distance;
break;
case Direction.Left:
Position.X -= distance;
break;
case Direction.Right:
Position.X += distance;
break;
}
}
使用 Action 委托(delegate),您可以按如下方式重构它:
static Something()
{
_directionMap = new Dictionary<Direction, Action<Position, int>>
{
{ Direction.Up, (position, distance) => position.Y += distance },
{ Direction.Down, (position, distance) => position.Y -= distance },
{ Direction.Left, (position, distance) => position.X -= distance },
{ Direction.Right, (position, distance) => position.X += distance },
};
}
public void Move(int distance, Direction direction)
{
_directionMap[direction](this.Position, distance);
}
关于c# - 在设计应用程序时如何使用 Func<> 和 Action<>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1537404/