【发布时间】:2011-05-13 02:57:21
【问题描述】:
如何创建可以存储函数的字典?
谢谢。
我有大约 30 多个可以由用户执行的功能。我希望能够以这种方式执行该功能:
private void functionName(arg1, arg2, arg3)
{
// code
}
dictionaryName.add("doSomething", functionName);
private void interceptCommand(string command)
{
foreach ( var cmd in dictionaryName )
{
if ( cmd.Key.Equals(command) )
{
cmd.Value.Invoke();
}
}
}
但是,函数签名并不总是相同的,因此具有不同数量的参数。
【问题讨论】:
-
这是一个很棒的成语——可以代替讨厌的 switch 语句。
-
那只是我自己写的一个糟糕的例子。我不知道创建一个可以做到这一点的字典,因为函数签名总是不同的。
-
@HamishGrubijan,如果您这样做是为了替换 switch 语句,那么您将放弃所有编译时优化和清晰度。所以,我会说它比成语更白痴。如果您想以一种在运行时可能会发生变化的方式动态映射功能,那么它可能会很有用。
-
@Jodrell,A) 白痴是一个没有建设性的强词,B) 旁观者眼中的清晰。我见过很多丑陋的 switch 语句。 C) 编译时间优化...此线程上的 Zooba 反对 stackoverflow.com/questions/505454/… 如果 switch 语句为 O(log N),那么它必须包含 100 多个案例才能使速度有所作为。当然,这是不可读的。也许 switch 语句可以利用完美的散列函数,但仅适用于少数情况。如果您使用的是 .Net,那么您不必担心微秒。
-
@Jodrell,(续)如果您想充分利用硬件,那么您可以按顺序使用 ASM、C 或 C++。 .Net 中的字典查找不会杀死你。代表的各种签名 - 这是您反对使用简单字典方法的最强点。
标签: c# function pointers dictionary