You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否向存储在字典中的Action传递调用参数?

问题分析与解决方案

嘿,这个问题我刚好踩过坑,先给你理清楚问题根源,再给你靠谱的解决办法~

首先得说:你当前的代码根本过不了编译!原因有两个:

  • Action是无参数、无返回值的委托类型,但你的Foo方法需要一个string参数,两者签名不匹配;
  • 你写的Foo()是直接调用方法了,而不是把方法引用赋值给委托,正确的写法应该是Foo(不带括号)。

正确的实现方式(推荐)

要想灵活给Foo传递参数,你需要把字典的委托类型改成匹配Foo签名的Action<string>:

  1. 定义正确的字典:
var example = new Dictionary<string, Action<string>>
{
    {"foo", Foo } // 这里是方法引用,不要加括号!
};
  1. 调用时直接传递参数:
// 取出委托后,像调用普通方法一样传参就行
example["foo"]("这是要传给Foo的文本");

特殊情况:必须用Action类型的字典(不推荐)

如果因为某些限制你一定要用Action类型的字典,那可以通过闭包把参数提前绑定进去,但这种方式参数是固定的,灵活性很差:

// 提前绑定固定参数
var preDefinedText = "我是固定的参数";
var example = new Dictionary<string, Action>
{
    {"foo", () => Foo(preDefinedText) }
};

// 调用时不需要传参,因为参数已经在闭包里固定了
example["foo"]();

总的来说,最合理、灵活的方式就是把字典的委托类型改成Action<string>,这样就能随时给Foo传递不同的参数啦~

内容的提问来源于stack exchange,提问作者SchwiftyPython

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:25:20