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.

Voir aussi