Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Từ khóa nameof trong C#


Giới thiệu

Toán tử nameof (C# 6+) trả về tên string literal của biến, kiểu, thành viên, namespace, ... tại **compile-time**. Không tốn chi phí runtime, an toàn refactor (rename -> tự cập nhật).

Ví dụ cơ bản

var vehicle = "motorbike";
Console.WriteLine(nameof(vehicle)); // "vehicle"

Ví dụ hoàn chỉnh

using System;

public class Program
{
    static void Main()
    {
        var vehicle = "motorbike";
        Console.WriteLine(nameof(vehicle)); // vehicle

        var time = DateTime.Now.ToLocalTime();
        Console.WriteLine(nameof(time));    // time

        var a = false;
        Console.WriteLine(nameof(a));       // a
    }
}

Kết quả

vehicle
time
a

Các trường hợp dùng nameof

Đối tượngVí dụKết quả
Biến cục bộnameof(x)"x"
Tham số phương thứcnameof(param)"param"
Thuộc tính/Fieldnameof(obj.Prop)"Prop"
Kiểu/Classnameof(List<int>)"List"
Namespacenameof(System.Collections)"Collections"
Enum membernameof(Color.Red)"Red"

Ứng dụng thực tế quan trọng

1. INotifyPropertyChanged / MVVM

public string Name
{
    get => _name;
    set { _name = value; OnPropertyChanged(nameof(Name)); }
}

2. ArgumentNullException

public void Foo(string bar)
{
    if (bar == null) throw new ArgumentNullException(nameof(bar));
}

3. Logging/Diagnostics

logger.LogInfo($"Method {nameof(ProcessOrder)} started");

Lưu ý

  • Chỉ chấp nhận biểu thức đơn giản (simple name, member access). Không dùng với biểu thức phức tạp: nameof(x + y) lỗi compile.
  • Không đánh giá biểu thức - không có side effect.
  • Thay thế cho "magic strings" cứng nhắc.