在 C# 中,确定对象 o 是否为 Action<...>或 Func<...>;
假设你有一本字典 <字符串,对象> 。它可能包含小数、字符串或其他有效类型。它还可以包含 Actions 和 Funcs,例如:
Action<string> or Action<int,int,string> etc.
是否有一种通用方法可以发现给定的键 k 指向 Action 或 Func,然后调用相同的值?
var value = dict[key];
//some sort of predicate checking if value is invokeable
我考虑过使用dynamic关键字并简单地在结果对象上调用Invoke(args),但这看起来很慢而且不优雅。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你可以测试它是一个代表:
但是!如果您不知道调用之前的签名,那么知道要提供什么参数(在对象数组中)是很棘手的。
You could test off it is a delegate:
However! Knowing what args to provide (in an object-array) is tricky if you don't know the signature ahead of the invoke.
如果您不想通过动态或 Delegate.DynamicInvoke 动态调用它,您可以使用一些通用扩展方法来为您执行测试。
首先,将你的字典设置为 Dictionary而不是对象。
接下来,创建几个扩展方法(或更多以匹配您关心的委托类型)。
最后,您可以像这样使用扩展方法...
不难想象将其构建为一个小型库并重新使用它。
If you don't want to invoke it dynamically via dynamic, or Delegate.DynamicInvoke, you could use some generic extension methods to perform the test for you.
First, make your dictionary a Dictionary<whatever, Delegate> rather than object.
Next, create a couple of extension methods (or more to match the delegate types you care about).
Finally, you use your extension methods like so...
It's not hard to imagine building this up as a small library and re-using it.