如何避免在匿名方法块中使用输出参数?
以下方法无法编译。 Visual Studio 警告“匿名方法中不得使用输出参数”。 WithReaderLock(Proc action)
方法采用一个 delegate void Proc()
。
public Boolean TryGetValue(TKey key, out TValue value)
{
Boolean got = false;
WithReaderLock(delegate
{
got = dictionary.TryGetValue(key, out value);
});
return got;
}
获得这种行为的最佳方法是什么? (请不要提供有关线程安全字典的建议,这个问题旨在解决一般的输出参数问题)。
The following method does not compile. Visual Studio warns "An out parameter may not be used within an anonymous method". The WithReaderLock(Proc action)
method takes a delegate void Proc()
.
public Boolean TryGetValue(TKey key, out TValue value)
{
Boolean got = false;
WithReaderLock(delegate
{
got = dictionary.TryGetValue(key, out value);
});
return got;
}
What's the best way to get this behavior? (Please refrain from providing advice on threadsafe dictionaries, this question is intended to solve the out parameter problem in general).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
(已编辑 - 小错误)
有关信息,在 .NET 3.5 中,您可能需要使用
Action
委托,而不是自己滚动,因为人们会更容易识别它。 即使在 2.0 中,也有很多void Foo()
委托:ThreadStart
、MethodInvoker
等 - 但Action
是最容易遵循的;-p(edited - small bug)
For info, in .NET 3.5 you might want to use the
Action
delegate instead of rolling your own, since people will recognise it more. Even in 2.0, there are lots ofvoid Foo()
delegates:ThreadStart
,MethodInvoker
, etc - butAction
is the easiest to follow ;-p简单的答案是复制方法内的逻辑。 但随后我们扩展了 DRY 原则,并且必须保持两种方法内的行为。
The simple answer is to just copy the logic inside the method. But then we stretch the DRY principle and have to maintain behavior inside both methods.