nameof expression (référence C#)

Une nameof expression produit le nom d’une variable, d’un type ou d’un membre comme constante de chaîne :

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

var 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

Comme l’illustre l’exemple précédent, dans le cas d’un type et d’un espace de noms, le nom produit n’est pas complet.

Dans le cas des identificateurs verbatim, le @ caractère n’est pas la partie d’un nom, comme l’illustre l’exemple suivant :

var @new = 5;
Console.WriteLine(nameof(@new));  // output: new

Une nameof expression est évaluée au moment de la compilation et n’a aucun effet au moment de l’exécution.

Vous pouvez utiliser une nameof expression 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");
}

L’argument de l’opérateur doit être dans l’étendue nameof . À compter de C# 11, les paramètres et les paramètres de type se trouvent dans l’étendue à l’intérieur d’un attribut à des fins de l’opérateur nameof . Les exemples suivants illustrent nameof les paramètres d’une méthode, d’une fonction locale et d’une expression lambda :

[ParameterString(nameof(msg))]
public static void Method( string msg)
{
    [ParameterString(nameof(param))]
    void LocalFunction(string param) { }

    var lambdaExpression = [ParameterString(nameof(aNumber))] (int aNumber) => aNumber.ToString();

}

L’utilisation nameof sur les paramètres est particulièrement utile lors de l’utilisation des attributs d’analyse Nullable.

spécification du langage C#

Pour plus d’informations, voir la section Expressions Nameof de la spécification du langage C#.

Voir aussi