webentwicklung-frage-antwort-db.com.de

Verwenden Sie nameof, um den Namen der aktuellen Methode abzurufen

Ich habe gesucht, gesucht und gehofft, kann aber keine klare Antwort finden.

Gibt es in C # 6.0 überhaupt eine Möglichkeit, den aktuellen Methodennamen mit nameof abzurufen, ohne den Methodennamen anzugeben?

Ich füge meine Testergebnisse einem Wörterbuch wie diesem hinzu:

Results.Add(nameof(Process_AddingTwoConsents_ThreeExpectedRowsAreWrittenToStream), result);

Ich würde es vorziehen, wenn ich den Methodennamen nicht explizit angeben müsste, damit ich die Zeile kopieren und einfügen kann, ein nicht funktionierendes Beispiel:

Results.Add(nameof(this.GetExecutingMethod()), result);

Nach Möglichkeit möchte ich Reflection nicht verwenden.

[~ # ~] Update [~ # ~]

Dies ist kein Duplikat von diese Frage . Ich frage, ob es explizit möglich ist, nameof ohne (!) Reflexion zu verwenden, um den aktuellen Methodennamen zu erhalten.

30
Marcus

Sie können nameof nicht verwenden, um das zu erreichen, aber wie wäre es mit dieser Problemumgehung:

Im Folgenden wird keine direkte Reflektion (genau wie in nameof) und kein expliziter Methodenname verwendet.

Results.Add(GetCaller(), result);

public static string GetCaller([CallerMemberName] string caller = null)
{
    return caller;
}

GetCaller gibt den Namen einer Methode zurück, die sie aufruft.

74
Zein Makki

Aufbauend auf der großartigen Antwort von user3185569:

public static string GetMethodName(this object type, [CallerMemberName] string caller = null)
{
    return type.GetType().FullName + "." + caller;
}

Dies führt dazu, dass Sie this.GetMethodName() überall aufrufen können, um den vollständig qualifizierten Methodennamen zurückzugeben.

4
Mike Cole