Sdílet prostřednictvím


nameof expression (referenční dokumentace jazyka C#)

Výraz nameof vytvoří název proměnné, typu nebo člena jako řetězcovou konstantu. Výraz nameof se vyhodnocuje v době kompilace a nemá žádný vliv na dobu běhu. Pokud je operand typem nebo oborem názvů, produkovaný název není plně kvalifikovaný. Následující příklad ukazuje použití výrazu 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

Pomocí výrazu nameof můžete kód kontroly argumentů lépe udržovat:

public string Name
{
    get => name;
    set => name = value ?? throw new ArgumentNullException(nameof(value), $"{nameof(Name)} cannot be null");
}

Počínaje jazykem C# 11 můžete použít nameof výraz s parametrem metody uvnitř atributu metody nebo jeho parametru. Následující kód ukazuje, jak to udělat pro atribut metody, místní funkce a parametr výrazu 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();
}

Výraz nameof s parametrem je užitečný, pokud používáte atributy analýzy s možnou hodnotou null nebo CallerArgumentExpression atribut.

Pokud je operand doslovný identifikátor, @ znak není součástí názvu, jak ukazuje následující příklad:

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

specifikace jazyka C#

Další informace najdete v části Nameof expressions specifikace jazyka C# a specifikace funkce jazyka C# 11 - Extended nameof scope.

Viz také