Bagikan melalui


ekspresi nameof (referensi C#)

nameof Ekspresi menghasilkan nama variabel, jenis, atau anggota sebagai konstanta string. Ekspresi nameof dievaluasi pada waktu kompilasi, dan tidak berpengaruh pada durasi. Ketika operand adalah jenis atau namespace, nama yang dihasilkan tidak sepenuhnya memenuhi syarat. Contoh berikut menunjukkan penggunaan nameof ekspresi:

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

Anda dapat menggunakan ekspresi nameof untuk membuat kode pemeriksaan argumen lebih dapat dipertahankan:

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

Dimulai dengan C# 11, Anda dapat menggunakan nameof ekspresi dengan parameter metode di dalam atribut pada metode atau parameternya. Kode berikut menunjukkan cara melakukannya untuk atribut pada metode, fungsi lokal, dan parameter ekspresi 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();
}

Ekspresi nameof dengan parameter berguna saat Anda menggunakan atribut analisis nullable atau atribut CallerArgumentExpression.

Ketika operand adalah pengidentifikasi verbatim, @ karakter bukan bagian dari nama, seperti yang ditunjukkan contoh berikut:

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

Spesifikasi bahasa C#

Untuk informasi selengkapnya, lihat bagian Ekspresi nameof dari spesifikasi bahasa C#, dan spesifikasi fitur cakupan C# 11 - Extendednameof.

Lihat juga