C# - C Sharp: Biểu thức nameof


Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên

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
» Tiếp: Attributes
« Trước: Giới thiệu về truy vấn LINQ
Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên
Copied !!!