C# - C Sharp: Biểu thức nameof
Biểu thức nameof
tạo ra tên của một biến, kiểu hoặc thành viên dưới dạng hằng chuỗi. Biểu thức nameof
được đánh giá tại thời điểm biên dịch và không có hiệu lực trong thời gian chạy. Khi toán hạng là một kiểu hoặc một namespace thì tên được tạo ra không đủ tiêu chuẩn. Ví dụ sau đây cho thấy việc sử dụng một biểu thức nameof
:
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
Bạn có thể sử dụng biểu thức nameof
để làm cho code kiểm tra đối số dễ bảo trì hơn:
public string Name { get => name; set => name = value ?? throw new ArgumentNullException(nameof(value), $"{nameof(Name)} cannot be null"); }
Bắt đầu từ C# 11, bạn có thể sử dụng biểu thức nameof
có tham số phương thức bên trong property trên phương thức hoặc tham số của nó. Đoạn mã sau đây cho biết cách thực hiện điều đó đối với một property trên một phương thức, hàm cục bộ và tham số của biểu thức 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(); }
Biểu thức nameof
có tham số sẽ hữu ích khi bạn sử dụng attribute phân tích có thể rỗng hoặc attribute CallerArgumentExpression.
Khi toán hạng là một mã định danh nguyên văn, thì ký tự @
không phải là một phần của tên, như ví dụ sau đây cho thấy:
var @new = 5; Console.WriteLine(nameof(@new)); // output: new