Normalerweise, wenn Sie eine bool TryDoSomething(...)
Methode überschreiben/implementieren, geben Sie false
zurück, wenn es nicht funktionierte.Was ist der bevorzugte Weg, um fehlendes Mitglied von DynamicObject zu behandeln?
Im Fall der DynamicObject
geben wir false
zurück und es löst eine Ausnahme aus, die nur eine allgemeine Fehlermeldung enthält.
Für
public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
wäre es
, die um eine nicht-Delegattyp aufrufen
und das ist es. Es gibt keine Informationen darüber, welches Mitglied nicht funktioniert hat und welche Parameter es waren.
Um zu verbessern dies würde ich nur meine eigene Ausnahme anstelle false
zurückwerfen, weil es sowieso scheitern wird.
public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
{
// ...
throw new Exception($"Method '{binder.Name}' not found.");
// ...
}
Ist das der nur/best Weg, es zu tun, oder es ist schon etwas anderes?
Dies ist irgendwie brechen die TryDoSomething
Muster, aber auf der anderen Seite wird es trotzdem scheitern, also warum nicht? Wird es irgendetwas brechen?
Thx für das Downvoting und keine Kommentare hinterlassen. – t3chb0t
Scheint wie eine gute Frage, seltsam, dass jemand anders fühlen würde. Ich bin zu Ihrer Lösung teilweise bereit, da es einfach genug zu sein scheint, um die Informationen zu erhalten, nach denen Sie bei der Ausnahme suchen. – KreepN
Sie kennen sich nicht gut mit dynamischem Zeug aus, aber könnten Sie 'InvokeMemberBinder.FallBackInvokeMember' nicht irgendwie verwenden, welches letztes Argument Daten über den Fehler zu enthalten scheint (und das verwendet, um eine explizitere Nachricht zu geben)? – Sehnsucht