web-dev-qa-db-fra.com

Utilisation de nameof pour obtenir le nom de la méthode actuelle

J'ai parcouru, cherché et espéré mais je ne trouve pas de réponse directe.

Existe-t-il de toute façon en C # 6.0 pour obtenir le nom de la méthode actuelle en utilisant nameof sans spécifier le nom de la méthode?

J'ajoute mes résultats de test à un dictionnaire comme celui-ci:

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

Je préférerais ne pas avoir à spécifier explicitement le nom de la méthode pour pouvoir copier + coller la ligne, un exemple non fonctionnel:

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

Si possible, je ne veux pas utiliser la réflexion.

[~ # ~] mise à jour [~ # ~]

Ce n'est pas (comme suggéré) un doublon de cette question . Je demande s'il est explicitement possible d'utiliser nameof sans (!) Réflexion pour obtenir le nom de la méthode actuelle.

30
Marcus

Vous ne pouvez pas utiliser nameof pour y parvenir, mais que diriez-vous de cette solution de contournement:

Ce qui suit n'utilise aucune réflexion directe (tout comme nameof) et aucun nom de méthode explicite.

Results.Add(GetCaller(), result);

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

GetCaller renvoie le nom de toute méthode qui l'appelle.

74
Zein Makki

S'appuyant sur la grande réponse de user3185569:

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

Vous permet d'appeler this.GetMethodName() n'importe où pour renvoyer le nom de méthode complet.

4
Mike Cole