Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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<>)); // 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
L’exemple précédent à utiliser List<> est pris en charge en C# 14 et versions ultérieures. 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");
}
Vous pouvez utiliser une nameof expression 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 détaillé, le @ caractère ne fait pas partie du nom, comme l’illustre l’exemple suivant :
var @new = 5;
Console.WriteLine(nameof(@new)); // output: new
spécification du langage C#
Pour plus d’informations, consultez la section Nameof expressions de la spécification du langage C# et la spécification de fonctionnalité étenduenameof.