Après le C# 6.0 (inclus), vous pouvez utiliser l'expression nameof:
using Stuff = Some.Cool.Functionality
class C {
static int Method1 (string x, int y) {}
static int Method1 (string x, string y) {}
int Method2 (int z) {}
string f() => nameof(T);
}
var c = new C()
nameof(C) -> "C"
nameof(C.Method1) -> "Method1"
nameof(C.Method2) -> "Method2"
nameof(c.Method1) -> "Method1"
nameof(c.Method2) -> "Method2"
nameof(z) -> "z" // à l'intérieur de Method2 ok, à l'intérieur de Method1 est une erreur de compilation
nameof(Stuff) = "Stuff"
nameof(T) -> "T" // fonctionne à l'intérieur d'une méthode mais pas dans les attributs de la méthode
nameof(f) -> “f”
nameof(f) -> erreur de syntaxe
nameof(f<>) -> erreur de syntaxe
nameof(Method2()) -> erreur “Cette expression n'a pas de nom”
Remarque! nameof
n'obtient pas le Type d'objet sous-jacent au moment de l'exécution, il s'agit simplement de l'argument au moment de la compilation. Si une méthode accepte un IEnumerable, alors nameof
renvoie simplement "IEnumerable", alors que l'objet réel pourrait être "List".
8 votes
Soit dit en passant, écrire
string1 + anything.ToString() + string2
est redondant. Le compilateur insère automatiquement l'appel àToString
si vous faitesstring1 + anything + string2
.17 votes
Pour ne pas être trop dur, aviez-vous inspecté les propriétés disponibles sur l'instance
Type
(telle que retournée partypeof(..)
) je suis certain que vous auriez pu le découvrir vous-même...0 votes
Pour une raison inconnue, la
Name
propriété est manquante dans la documentation - du moins, elle n'est pas là où je la cherchais.