【问题标题】:Are there anonymous, type-safe, generic delegate signatures in C# 2.0?C# 2.0 中是否有匿名的、类型安全的、通用的委托签名?
【发布时间】:2008-10-09 16:44:25
【问题描述】:

考虑一个通用的 AB 函数的委托:

public delegate B Fun<A, B>(A x);

然后我可以编写一个接受和调用Fun 委托的函数:

public static B invokeFun<A, B>(A x, Fun<A, B> f)
{ return f(x); }

(不管写invokeFun是否明智。)

我可以写invokeFun 而不命名Fun 代表吗?我希望这样的事情能够奏效,但它没有:

public static B invokeFun<A, B>(A x, B (A) f)
{ return f(x); }

【问题讨论】:

    标签: c# generics delegates


    【解决方案1】:

    不,没有。

    您可以获得的最接近的是 .NET 3.5 中的两个通用委托系列:FuncAction。显然它们实际上并没有出现在 .NET 2.0 中(Action&lt;T&gt; 除外),但它们写起来很简单 - 事实上我有 done so for you :)

    我个人很高兴“uber-short”语法无效 - 我发现它比参数的正常“这里是类型,这里是名称”语法更难理解。

    【讨论】:

    • 我不喜欢建议的“短”语法,但我确实觉得没有办法接受鸭式代表很烦人。有时,指定例程需要一个自称为EventHandler&lt;MyEventArgs&gt; 的委托而不是采用ObjectMyEventArgs 的方法的任意委托是很有用的。另一方面,在许多情况下,如果某个特定签名的每个委托都派生自相同的通用泛型委托类型,并且这些通用类型可以用作泛型约束,那将是有帮助的。
    猜你喜欢
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多