Megosztás a következőn keresztül:


kifejezés neve (C# hivatkozás)

Egy nameof kifejezés egy változó, típus vagy tag nevét állítja elő sztringállandóként. A nameof kifejezés fordításkor lesz kiértékelve, és futásidőben nincs hatása. Ha az operandus típus vagy névtér, a létrehozott név nem teljes értékű. Az alábbi példa egy nameof kifejezés használatát mutatja be:

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

Egy kifejezéssel nameof karbantarthatóbbá teheti az argumentum-ellenőrző kódot:

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

A C# 11-től kezdve használhat egy nameof metódus vagy paraméter attribútumán belüli metódusparaméterrel rendelkező kifejezést. Az alábbi kód bemutatja, hogyan lehet ezt megtenni egy metóduson, egy helyi függvényen és egy lambdakifejezés paraméterén:

[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();
}

A nameof paraméterrel rendelkező kifejezések akkor hasznosak, ha a null értékű elemzési attribútumokat vagy a CallerArgumentExpression attribútumot használja.

Ha az operandus szó szerinti azonosító, a @ karakter nem része a névnek, ahogy az alábbi példa is mutatja:

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

C# nyelvspecifikáció

További információ: A C# nyelv specifikációjának Névkifejezések szakasza és a C# 11 – Kiterjesztett nameof hatókörű funkció specifikációja.

Lásd még