Không thể thực hiện điều này với sự phản ánh, vì các biến sẽ không có tên khi được biên dịch sang IL. Tuy nhiên, bạn có thể sử dụng cây biểu hiện và phát huy biến để đóng cửa:
static string GetVariableName<T>(Expression<Func<T>> expr)
{
var body = (MemberExpression)expr.Body;
return body.Member.Name;
}
Bạn có thể sử dụng phương pháp này như sau:
static void Main()
{
var someVar = 3;
Console.Write(GetVariableName(() => someVar));
}
Lưu ý rằng điều này là khá chậm, do đó, không sử dụng nó trong các đường dẫn quan trọng về hiệu suất của ứng dụng của bạn. Mỗi khi mã này chạy, một số đối tượng được tạo ra (gây ra áp lực GC) và bên dưới bao gồm nhiều phương thức không thể khắc phục được gọi và một số phản xạ nặng được sử dụng.
Để biết ví dụ hoàn chỉnh hơn, hãy xem here.
CẬP NHẬT
Với C# 6.0, các từ khóa nameof
được thêm vào ngôn ngữ, cho phép chúng ta làm như sau:
static void Main()
{
var someVar = 3;
Console.Write(nameof(someVar));
}
Điều này rõ ràng là thuận tiện hơn nhiều và có cùng chi phí đã xác định chuỗi là chuỗi ký tự không đổi.
@helen câu hỏi của tôi khá đơn giản, trái ngược với sự phân tán của một câu hỏi mà anh ấy nghĩ ra, mà tôi vẫn nghĩ là khá khác biệt. –
Điều gì có thể là lý do đằng sau điều này? – Dested