C# 操作/函数列表

2023-11-29

我有一个程序必须根据枚举执行一个函数,我想知道是否还有其他方法:

enum FunctionType
{
 Addition = 0,
 Substraction = 1,
 Mutiplication = 2,
 Division = 3
}
void ExecuteFunction(FunctionType Function)
{
  switch(Function)
  {
    case FunctionType.Addition: Addition();
    break;
    case FunctionType.Substraction: Subsctration();
    break;      
    ...
    default: ...  
  }
}

(这不是我正在使用的代码,它只是代表我想要做的事情)。 这种方法应该可以正常工作,但是当您有更多功能时会发生什么?我不想有 50 线交换机。所以我想知道是否有一种方法可以简化它,也许是这样的:

enum FunctionType : Action
{
 Addition = new Action(Addition);
 Substraction = new Action(Substraction);
 ....
}
void ExecuteFunction(FunctionType Function)
{
 (Action)Function.Invoke();
}

无需交换机,50 条线可以变成 1 条线。但这是不可能的,只有数字类型被接受为枚举。 我认为有可能有一个List<T>操作,但这需要在运行时将每个操作添加到列表中。

编辑: 我在源代码中找到了一种完成此操作的方法,但我无法真正理解它。这就是我得到的: 他们创造了一个定制Attribute其中包含一个string(方法名称)以及它们所做的方法:

[CustomAtrribute("name")]
void Method()
{    
}

然后我不知道它的名字是怎么称呼的,我猜是某种反映,但我不知道如何找到有关此的信息。

EDIT2:我找到了我想要的方法,我将添加一个带有函数的接口,然后使用函数内的代码实现该接口并使用Dictionary<Enum, Interface>来调用它。我不知道是否应该回答我自己的问题,无论如何,感谢所有帮助过我的人。


不能说我会建议这样做,但是:

public static class Functions
{
    public static Func<int, int, int> Add = (x, y) => { return x + y; };
}

然后你只需调用Functions.Add(1,1)

如果你真的have要使用枚举,那么你可以这样做:

public static class Functions
{
    public static void Add()
    {
        Debug.Print("Add");
    }

    public static void Subtract()
    {
        Debug.Print("Subtract");
    }

    public enum Function
    {
        Add,
        Subtract
    }

    public static void Execute(Function function)
    {
        typeof(Functions).GetMethod(function.ToString()).Invoke(null, null);
    }
}

Then Functions.Execute(Functions.Function.Add)(额外的函数是因为我的枚举位于 Functions 类内)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 操作/函数列表 的相关文章

随机推荐