nameof ifadesi (C# başvurusu)
İfade nameof
, dize sabiti olarak bir değişkenin, türün veya üyenin adını üretir. bir nameof
ifade derleme zamanında değerlendirilir ve çalışma zamanında hiçbir etkisi yoktur. İşlenen bir tür veya ad alanı olduğunda, üretilen ad tam olarak nitelenmemiştir. Aşağıdaki örnekte bir nameof
ifadenin kullanımı gösterilmektedir:
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
Bağımsız değişken denetimi kodunu daha sürdürülebilir hale getirmek için bir nameof
ifade kullanabilirsiniz:
public string Name
{
get => name;
set => name = value ?? throw new ArgumentNullException(nameof(value), $"{nameof(Name)} cannot be null");
}
C# 11'le başlayarak, bir nameof
yöntemdeki veya parametresindeki bir özniteliğin içinde yöntem parametresi olan bir ifade kullanabilirsiniz. Aşağıdaki kodda bir yöntem, yerel işlev ve lambda ifadesinin parametresi üzerindeki bir öznitelik için bunun nasıl yapıldığını gösterilmektedir:
[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();
}
nameof
Parametresi olan bir ifade, null atanabilir analiz özniteliklerini veya CallerArgumentExpression özniteliğini kullandığınızda kullanışlıdır.
İşlenen bir düz metin tanımlayıcısı olduğunda, @
aşağıdaki örnekte gösterildiği gibi karakter bir adın parçası değildir:
var @new = 5;
Console.WriteLine(nameof(@new)); // output: new
C# dili belirtimi
Daha fazla bilgi için C# dil belirtimininNameof ifadeleri bölümüne ve C# 11 - Genişletilmiş nameof
kapsam özellik belirtimine bakın.