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

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

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 ile başlayarak, bir nameof yöntem veya parametresindeki bir özniteliğin içinde yöntem parametresi olan bir ifade kullanabilirsiniz. Aşağıdaki kod bir yöntem, yerel işlev ve lambda ifadesinin parametresi üzerindeki bir öznitelik için bunun nasıl yapılacağını gösterir:

[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 ayrıntılı tanımlayıcı 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 belirtiminin Nameof ifadeleri bölümüne ve C# 11 - Genişletilmiş nameof kapsam özellik belirtimine bakın.

Ayrıca bkz.