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
.