Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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<>)); // 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
Az előző példa használata List<> a C# 14-ben és újabb verzióiban támogatott. 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");
}
Egy metódus vagy paraméter attribútumán belüli metódusparaméterrel rendelkező kifejezést is használhatnameof. 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ókért tekintse meg a C# nyelv specifikációjánakNévkifejezések szakaszát és a Kiterjesztett nameof hatókör funkció specifikációját.