c# - 字符串函数字典 c#,其中函数具有不同的参数

标签 c# function dictionary

基本上我试图在 C# 中创建一个字符串来函数字典,我已经看到它是这样完成的:

Dictionary<string, Func<string, string>>

但是问题是我想放入字典的函数都有不同数量的不同类型的参数。因此,我该如何制作一本能做到这一点的字典?

亚当

最佳答案

您可以使用 params string[] 参数定义自己的委托(delegate),如下所示:

delegate TOut ParamsFunc<TIn, TOut>(params TIn[] args);

然后像这样声明你的字典:

Dictionary<string, ParamsFunc<string, string>> functions;

所以,你可以这样使用它:

public static string Concat(string[] args)
{
    return string.Concat(args);
}

var functions = new Dictionary<string, ParamsFunc<string, string>>();
functions.Add("concat", Concat);

var concat = functions["concat"];

Console.WriteLine(concat());                                //Output: ""
Console.WriteLine(concat("A"));                             //Output: "A"
Console.WriteLine(concat("A", "B"));                        //Output: "AB"
Console.WriteLine(concat(new string[] { "A", "B", "C" }));  //Output: "ABC"

请注意,您仍然需要使用 string[] 参数来声明您的方法,即使您只需要一个 string 参数也是如此。

另一方面,它可以使用 params 风格调用(如 concat()concat("A", "B")).

关于c# - 字符串函数字典 c#,其中函数具有不同的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28992411/

相关文章:

c# - 在整个序列中最均匀地分布字母表中的字母

c# - 我需要担心 Unity/C# 中的内联吗?

c - 为什么我们不能将结构返回给函数?

python - 为什么字典比 Python 中的列表更快?

python - 如何在 python 中合并附加两个嵌套字典?

c# - Open CV saturate_cast 函数的 Emgu CV 等价物是什么?

c# - 如何从 MultiSelectList 返回 MvcHtmlString

javascript - 如何使用一个 forEach 循环来迭代两个不同的数组?

jquery - 如何减少包含略有不同逻辑的函数的数量?

python - 如何将字典中的二维数组转换为一个数组?