How do you use Func<> and Action<> when designing applications?

后端 未结 9 1003
情书的邮戳
情书的邮戳 2020-12-22 16:27

All the examples I can find about Func<> and Action<> are simple as in the one below where you see how they technically work but I would like

9条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-12-22 17:31

    They're also handy for refactoring switch statements.

    Take the following (albeit simple) example:

    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;
        }
    }
    

    With an Action delegate, you can refactor it as follows:

    static Something()
    {
        _directionMap = new Dictionary>
        {
            { 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);
    }
    

提交回复
热议问题