【发布时间】:2012-12-13 08:33:15
【问题描述】:
我的MessageBus 有以下扩展方法:
public static class MessageBusMixins
{
public static IDisposable Subscribe<T>(
this IObservable<T> observable,
MessageBus bus)
where T:class
{
...
}
public static IDisposable Subscribe<T>(
this IObservable<Maybe<T>> observable,
MessageBus bus)
{
...
}
}
编译得很好。但是,当我尝试使用它时:
IObservable<Maybe<string>> source = ...;
MessageBus bus = ...;
source.Subscribe(bus);
我得到两个候选方法都没有的错误
是最具体的。但是我认为Maybe<T> 会
比T 更具体 还是不正确?
编辑
它变得更好奇,因为如果我调用扩展方法 然后明确:
MessageBus.SubscribeTo(source, bus);
然后它会工作并选择正确的方法。
【问题讨论】:
-
你可以让它按预期工作:
public static IDisposable Subscribe<T>( this IObservable<T> observable, MessageBus bus) where T : Maybe<T> -
@2kay 通用约束不是候选解决过程的一部分,因此它不起作用
标签: c# generics extension-methods