C# übergeben der Methode als parameter

Beim einloggen bekommen Sie immer verstrickt in string-literalen.

Ich gelöst, die schön für Eigenschaften, Felder und Variablen, die durch die übergabe einer Expression<Func<T>> expression (wie bereits hier), so dass Sie tun können, Dinge wie diese:

public void Demo(string someArgument)
{
    LogFrameWork.LogLine("Demo"); //goal is to get rid of these string literals
    LogFramework.Log(() => someArgument);
}

Will ich tun, etwas ähnliches für die Methode Demo selbst:

public void Demo(string someArgument)
{
    LogFramework.Log(this.Demo);
}

Versuchte ich Dinge wie diese:

public static void Log(Delegate method)
{
    string methodName = method.Method.Name;
    LogLine(methodName);
}

und so:

public static void Log(Action method)
{
    string methodName = method.Method.Name;
    LogLine(methodName);
}

Aber bekomme ich compiler Fehler wie diese:

Argument 1: cannot convert from 'method group' to 'System.Delegate' 
Argument 1: cannot convert from 'method group' to 'System.Action'   

Konnte ich die Einführung einer Reihe von überladungen mit Func<...> und Aktion<...>, aber das klingt zu Komplex.

Gibt es eine Möglichkeit, diese für jede Methode, die mit einer beliebigen Anzahl von Parametern und ein optionales Ergebnis?

--jeroen

PS: ich denke, diese Frage vielleicht haben einige Relevanz hier, aber keine Antworten, die mir ein " aha " - Gefühl 🙂

  • Ich verstehe Ihre Frage, aber glaubst du nicht, Sie wäre es viel einfacher und besser erweiterbar mit einigen AOP-framework? Man könnte das erstellen von benutzerdefinierten-Attribut, das würde daneben Methoden, die protokolliert werden sollen, nach dem Aufruf.
  • Ich habe AOP in der Vergangenheit, und es verursacht die compile/link-Male zu explodieren. Da .NET hat bereits viel höher compile/link Male, die ich lieber vermeiden.
  • Jede Lösung für dieses Allgemeine problem, das ich gesehen habe, die mit expression trees verwendet hat, die mehrere überladungen Ansatz, der ist auch ein bisschen umständlich, da müssen Sie die Parameter enthalten. Wenn ich dabei bin, zu schreiben-Handbuch trace-logging, ich in der Regel geben Sie einfach den Namen der Methode als string-Konstante und verlassen Sie sich auf Resharper um mich daran zu erinnern, um synchron zu halten.
Schreibe einen Kommentar