
如果您只有两种特定的注册类型(这似乎是您的问题),则可以简单地实现两种扩展方法:
public static DelegateRegistration Parameter<T>( this DelegateRegistration p, string name, T value);public static ConcreteTypeRegistration Parameter<T>( this ConcreteTypeRegistration p, string name, T value);
然后,您无需指定type参数,因此类型推断将在您提到的示例中起作用。请注意,您可以通过将委派给具有两个类型参数(问题中的一个)的单个通用扩展方法来实现这两种扩展方法。
通常,C#不支持
o.Foo<int,?>(..)仅推断第二个类型参数的任何功能(这将是一个不错的功能-F#具有此功能,它非常有用:-))。您可能会实现一种解决方法,使您可以编写此代码(基本上是,通过将调用分为两个方法调用,以获得可以在其中应用类型推断的两个位置):
FooTrick<int>().Apply(); // where Apply is a generic method
这是一个伪代码来演示结构:
// in the original objectFooImmediateWrapper<T> FooTrick<T>() { return new FooImmediateWrapper<T> { InvokeOn = this; } }// in the FooImmediateWrapper<T> class(...) Apply<R>(arguments) { this.InvokeOn.Foo<T, R>(arguments);}欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)