Mam następujące metody rozszerzenie dla mojego MessageBus
:C# specjalizacji ogólnych metod rozszerzenie
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)
{
...
}
}
który kompiluje grzywny. Jednak gdy próbuję go użyć:
IObservable<Maybe<string>> source = ...;
MessageBus bus = ...;
source.Subscribe(bus);
pojawia się błąd, że żadna z tych dwóch metod kandydujących są najbardziej konkretne. Jednak myślałem, że Maybe<T>
będzie więcej specyficzne niż T
lub czy to nie jest poprawne?
EDIT
Robi Curiouser bo gdybym wywołać metodę rozszerzenia wyraźnie następnie:
MessageBus.SubscribeTo(source, bus);
Wtedy to działa i wybiera właściwą metodę.
Można zrobić to działa zgodnie z oczekiwaniami: 'public static IDisposable Subskrybuj ( to IObservable obserwowalne, messagebus autobus) gdzie T: Może ' –
2kay
T nie może być Może –
bradgonesurfing
@ 2kay Generic ograniczenia nie są częścią proces rozstrzygania kandydatów, więc to nie zadziała – SWeko