如何使用多态重构switch-case?

时间:2016-02-03 00:47:04

标签: c# reflection polymorphism

从控制台我以格式[command] [position] [value]获取命令,例如乘以2 3 我应该根据命令操纵一个整数数组。 例如,如果我在执行"乘以2 3"之后有int[] arr = new int[] { 0, 2, 0 };命令数组应该看起来像{ 0, 8, 0 }

我现在这样做的方法是将信息提供给执行该操作的方法。

static void PerformAction(int[] arr, string action, int position, int value)
    {
        switch (action)
        {
            case "multiply":
                array[position] *= value;
                break;
            case "add":
                array[pos] += value;
                break;
            case "subtract":
                array[pos] -= value;
                break;
        }
    }

我的问题是 - 我如何应用多态和/或反射,所以我可以说:

ExecuteCommand(int[] arr, string action, int position, int value)

也许每个命令都有一个类,以便每个命令都知道如何执行。

1 个答案:

答案 0 :(得分:0)

使用反射的简单计算器看起来像这样

using System.Reflection;

namespace StackOverFlow35166571
{
    public class ReflectionCalculator
    {
        public int Calculate(string action, int a, int b)
        {
            var methodInfo = this.GetType().GetMethod(action, BindingFlags.Instance | BindingFlags.NonPublic);
            var result = (int)methodInfo.Invoke(this, new object[] { a, b });
            return result;
        }

        private int Multiply(int a, int b)
        {
            return a * b;
        }
    }
}

通话看起来像

var calc = new ReflectionCalculator();
var result = calc.Calculate("Multiply", 10, 3); // 30

使用您的输入的通话看起来像

var calc = new ReflectionCalculator();
array[position] = calc.Calculate(action, array[position], value);