Expression nameof (référence C#)
Une expression nameof
produit le nom d’une variable, d’un type ou d’un membre en tant que constante de chaîne. Une expression nameof
est évaluée au moment de la compilation et n’a aucun effet au moment de l’exécution. Lorsque l’opérande est un type ou un espace de noms, le nom produit n’est pas complet. L'exemple suivant illustre l'utilisation d’une expression nameof
:
Console.WriteLine(nameof(System.Collections.Generic)); // output: Generic
Console.WriteLine(nameof(List<int>)); // output: List
Console.WriteLine(nameof(List<int>.Count)); // output: Count
Console.WriteLine(nameof(List<int>.Add)); // output: Add
List<int> numbers = new List<int>() { 1, 2, 3 };
Console.WriteLine(nameof(numbers)); // output: numbers
Console.WriteLine(nameof(numbers.Count)); // output: Count
Console.WriteLine(nameof(numbers.Add)); // output: Add
Vous pouvez utiliser une expression nameof
pour rendre le code de vérification des arguments plus gérable :
public string Name
{
get => name;
set => name = value ?? throw new ArgumentNullException(nameof(value), $"{nameof(Name)} cannot be null");
}
À compter de C# 11, vous pouvez utiliser une expression nameof
avec un paramètre de méthode à l’intérieur d’un attribut sur une méthode ou son paramètre. Le code suivant montre comment procéder pour un attribut sur une méthode, une fonction locale et le paramètre d’une expression lambda :
[ParameterString(nameof(msg))]
public static void Method(string msg)
{
[ParameterString(nameof(T))]
void LocalFunction<T>(T param) { }
var lambdaExpression = ([ParameterString(nameof(aNumber))] int aNumber) => aNumber.ToString();
}
Une expression nameof
avec un paramètre est utile lorsque vous utilisez les attributs d’analyse nullables ou l’attribut CallerArgumentExpression.
Lorsque l’opérande est un identificateur verbatim, le caractère @
n’est pas la partie d’un nom, comme le montre l’exemple suivant :
var @new = 5;
Console.WriteLine(nameof(@new)); // output: new
spécification du langage C#
Pour plus d’informations, consultez la section Expressions Nameof de la spécification du langage C# et la spécification de fonctionnalité C# 11 - Portéenameof
étendue.