Ich habe folgende Erweiterungsmethoden für meine MessageBus
:C# Spezialisierung der generischen Erweiterungsmethoden
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)
{
...
}
}
die fein kompiliert. Allerdings, wenn ich versuche, es zu benutzen:
IObservable<Maybe<string>> source = ...;
MessageBus bus = ...;
source.Subscribe(bus);
ich den Fehler, dass keiner der beiden Kandidaten Methoden sind die meisten spezifisch. Aber ich dachte, dass Maybe<T>
wäre mehr spezifisch als T
oder ist das nicht korrekt?
EDIT
Es wird neugieriger, denn wenn ich die Erweiterung Methode dann explizit aufrufen:
MessageBus.SubscribeTo(source, bus);
Dann funktioniert es und nimmt die richtige Methode.
Sie können es wie erwartet funktioniert: 'public static IDisposable Abonnieren ( diese IObservable beobachtbar, messagebus Bus), wo T: Vielleicht ' –
2kay
T nicht Vielleicht sind generische Einschränkungen –
bradgonesurfing
@ 2kay sein kann nicht Teil der Kandidat Auflösung Prozess, so dass es nicht funktioniert – SWeko