我可以在 Action 或 Func 委托中使用参数吗?
当我尝试在操作委托中使用参数时...
private Action<string, params object[]> WriteToLogCallBack;
我收到此设计时错误:
类、结构或接口成员声明中的标记“params”无效
任何帮助!
When I'm trying to use params in an Action delegate...
private Action<string, params object[]> WriteToLogCallBack;
I received this design time error:
Invalid token 'params' in class, struct, or interface member declaration
Any help!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
这个解决方法怎么样?
或者您可以定义自己的委托类型:
How about this workaround?
Or you could define your own delegate type:
可变参数类型在 C# 中是不可能的。
这就是为什么有许多
Action<...>
、Func<...>
和Tuple<...>< 声明的原因例如,/代码>。不过,这将是一个有趣的功能。 C++0x 有它们。
Variadic type parameters are not possible in C#.
That's why there're many declarations for
Action<...>
,Func<...>
, andTuple<...>
, for example. It would be an interesting feature, though. C++0x has them.你可以试试这个。它允许任意数量的参数,如果传递错误数量或类型的参数,您将收到编译时错误。
You could try this. It allows for any number of arguments, and you'll get a compile time error if you pass the wrong number or type of arguments.
您可以在委托的实际声明中使用 params,但不能在委托类型中使用。 Action 的通用参数只是类型,而不是调用委托时要传递的实际参数。 params 不是类型,而是关键字。
You can use
params
in the actual declaration of a delegate, but not in type of one. The generic parameters to an Action are only types, not the actual arguments to be passed when invoking the delegate. params is not a type, it is a keyword.我对 Bryan 的上述代码做了一个小的扩展,以展示如何包装多个方法调用。
我使用它来将包含数据库调用的多个方法包装到单个事务中。
谢谢布莱恩:-)
(可以在LINQPad中运行以下命令进行测试)
I have done a minor extension to the above code from Bryan, to show how to wrap multiple method calls.
I am using this to wrap multiple methods that contain database calls, into a single transaction.
Thanks Bryan :-)
(You can run the following in LINQPad to test)