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

2024-03-30

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

Dictionary<string, Func<string, string>>

然而问题是,我想要放入字典中的函数都有不同数量的不同类型的参数。那么我该如何制作一本能够做到这一点的字典呢?

Adam


您可以定义自己的委托params string[]论证,像这样:

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() or concat("A", "B")).

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

字符串 - 函数字典 C#,其中函数具有不同的参数 的相关文章

  • & 运算符的含义是什么?

    在下面的代码中 Expression
  • 在目标 VS 安装时,VSIX 扩展内部使用的 WPF-Log4Net 未输出日志

    当 Log4net 在 VSIX 扩展中使用并安装在另一个目标 VS 上时 它不会记录日志 我有一个 WPF 解决方案 我下载了 log4net dll 添加了 log4net config 并将 复制到输出目录 值设置为 始终复制 log
  • 我要恢复我的记忆!我怎样才能真正处理一个控件?

    我正在制作一个应用程序 它创建大量的窗口控件 按钮和标签等 它们都是通过函数动态生成的 我遇到的问题是 当我删除控件并处置它们时 它们不会从内存中删除 void loadALoadOfStuff while tabControlToClea
  • 多维数组和指向指针的指针

    创建多维数组时char a 10 10 根据我的书 它说你必须使用类似于char a 10 将数组传递给函数 为什么必须这样指定长度 您不是只是将双指针传递给 with 并且该双指针不是已经指向分配的内存吗 那么为什么参数不能是char a
  • 以编程方式运行 T4 文本模板

    有没有一种方法可以通过代码以编程方式运行 T4 文本模板 我正在制作一种自定义域特定语言 我希望相关的文本模板在用户每次保存时运行 目前 这就是我在 DSL 模型中所做的事情 protected override void OnDocume
  • ASP.NET中如何访问除wwwroot以外的位置

    我可以使用访问服务器的物理位置Server MapPath 这给了我内部的物理路径wwwroot文件夹 我想将一些数据保存到同一服务器的另一个驱动器中D 驾驶 我想我无法获取以下位置的物理位置D 驾驶使用Server MapPath因为它位
  • 除空字符串外的任何内容的正则表达式

    是否可以使用正则表达式来检测任何不是 空字符串 的内容 如下所示 string s1 string s2 string s3 string s4 etc 我知道我可以使用修剪等 但我想使用正则表达式 s 将匹配任何包含至少一个非空格字符的字
  • 为什么我无法调试动态加载的程序集?

    我正在开发一个 Web API 项目 该项目使用内部模拟框架 允许拦截和修改来自控制器的响应 它使用 MEF 加载包含某些先决条件匹配时执行的代码的程序集 我知道这是正常工作的 因为我可以在响应中看到模拟已被执行 但由于某种原因我无法调试动
  • 类型别名和不完整类型

    我可能已经超出了解决这个本应简单的问题的范围 我在这里开始这个问题 在编译时获取基类的类型 https stackoverflow com questions 17735852 getting type of a base class at
  • C++ 联合数组和变量?

    在C 中没有办法做这样的事情吗 union Scalar x y Scalar v 2 Where x v 0 and y v 1 既然您使用的是 C 而不是 C 并且它们具有相同的类型 为什么不直接将 x 设为对 v 0 的引用 将 y
  • 在Framework 4.6项目中使用.net core DLL

    我已经在 net core 2 0 中构建了一个 DLL 现在我想在使用 net 4 6 1 框架的 WinForms 项目中使用它 我可以引用该 dll 但收到 System IO FileLoadException 表示找不到 Syst
  • 在字典理解中为 locals() 添加下标失败并出现 KeyError [重复]

    这个问题在这里已经有答案了 我对 Python 的奇怪行为感到困惑locals 基本上我想从字典中获取一个项目locals 在字典理解中 但它失败了 这是一个非常基本的事情 所以 gt gt gt foo 123 gt gt gt bar
  • “显式”关键字对返回值优化 (RVO) 有何影响?

    以下代码工作得很好 显示 RVO struct A A int cout lt lt A A n constructor A const A cout lt lt A A const A n copy constructor A foo r
  • ModelState 对于空模型有效

    我有一个具有必需属性的模型对象 public class ApiPing Required public DateTime ClientTime get set public DateTime ServerTime get set 我有一个
  • 在后台任务中设置壁纸

    我想从后台任务的存储文件夹中获取所有图像 首先在app entering后台方法中注册一个后台任务 我还可以调试 Run 方法 但所有等待方法都不起作用 public void Run IBackgroundTaskInstance tas
  • 使用存储过程是一个坏主意吗?

    微软经常提供一些方法 让开发简单琐碎的事情变得容易 EFxx 中有一些我不喜欢的东西 首先也是最重要的 为了进行更新 您需要首先加载记录 因此该操作变成了一个两步过程 您可能只想更新一个布尔值 其次 我喜欢存储过程 因为我可以在同一个连接调
  • 如何检查路径是否指向可执行文件?

    我尝试创建某种文件浏览器 我想知道路径下的文件是否可以跨平台方式执行 如何使用 boost filesystem 来做这样的事情 Boost 没有有关权限的内容 http boost 2283326 n4 nabble com filesy
  • Eigen:将每一行除以最后一行

    使用 Eigen 时我不太清楚其语法rowwise运营 我有一个特征矩阵 我想将每一行除以最后一行 所以如果我们从一个矩阵开始 r 0 1 2 3 4 5 然后在这个转变之后 我想要 r 0 2 5 6 1 1 最好该操作发生在适当的位置
  • 控制台项目中的 WPF 窗口?

    我最近启动了一个 C 项目 VS 2008 作为 控制台 项目 我在其中编写了一些库 测试程序等 现在我想添加几个 WPF 窗口 但看起来控制台项目不会让我这样做 我来自 Java 所以这有点奇怪 如何添加 WPF 表单 我将从 主 类中实
  • 绑定到内部 ViewModel-Property

    我有一个 UserControl 其 ViewModel 类作为 DataContext XAML

随机推荐