gpt4 book ai didi

c# - 如何用 Dictionary> 替换这个 switch - case?

转载 作者:行者123 更新时间:2023-11-30 21:53:18 25 4
gpt4 key购买 nike

我讨厌开关盒。我正在尝试在我的代码中重构一个 switch - case,如下所示:

int i = 0;
string str = string.empty;

switch (color)
{
case "red":
i = MyIntArgsFunction(1, 2);

case "blue":
str = MyStringArgsFunction("cat", "dog");
}


private int MyIntArgsFunction(int x, int y)
{
// Implementation
}

private string MyStringArgsFunction(string s, string t)
{
// Implementation
}

我想将 MyIntArgsFunction 和 MyStringArgsFunction 这两个函数添加到 Dictionary> 结构中,然后根据用户选择的颜色调用适当的函数。但是由于他们的论点不同,我无法为 Func 委托(delegate)得出合适的签名。

有人可以帮忙吗?

尼哈尔

最佳答案

它看起来很糟糕,但它确实有效:)

    private static void Main(string[] args)
{
var blueHandler = new Action<string, string>((x, y) => { });
var redHandler = new Action<int, int>((x, y) => { Console.WriteLine(x);});

var redStr = "Red";
var blueStr = "Blue";

var colorSelector = new Dictionary<string, Invoker>();
var a = 10;
var b = 20;
colorSelector.Add(redStr, new Invoker(redHandler, a, b));
colorSelector.Add(blueStr, new Invoker(blueHandler, a, b));

colorSelector["Red"].Invoke();
}

public class Invoker
{
private Delegate _handler;
public object[] _param;
public Invoker(Delegate handler, params object[] param)
{
_param = param;
_handler = handler;
}

public void Invoke()
{
_handler.DynamicInvoke(_param);
}
}

关于c# - 如何用 Dictionary<string, Func<>> 替换这个 switch - case?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34000659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com