Nếu tôi có một lớp được gọi MyProgram
, có cách nào để lấy " MyProgram " dưới dạng chuỗi không?
Nếu tôi có một lớp được gọi MyProgram
, có cách nào để lấy " MyProgram " dưới dạng chuỗi không?
Câu trả lời:
Thử cái này:
this.GetType().Name
nameof
toán tử mới .
Tôi muốn ném nó lên cho biện pháp tốt. Tôi nghĩ rằng cách @micahtan được đăng là ưa thích.
typeof(MyProgram).Name
nameof(MyProgram)
.
Mặc dù câu trả lời của micahtan là tốt, nhưng nó sẽ không hoạt động theo phương pháp tĩnh. Nếu bạn muốn lấy tên của loại hiện tại, loại này sẽ hoạt động ở mọi nơi:
string className = MethodBase.GetCurrentMethod().DeclaringType.Name;
Nếu bạn cần điều này trong các lớp dẫn xuất, bạn có thể đặt mã đó vào lớp cơ sở:
protected string GetThisClassName() { return this.GetType().Name; }
Sau đó, bạn có thể đạt được tên trong lớp dẫn xuất. Trả về tên lớp dẫn xuất. Tất nhiên, khi sử dụng từ khóa "nameof" mới, sẽ không có nhu cầu như hành vi đa dạng này.
Ngoài ra bạn có thể định nghĩa điều này:
public static class Extension
{
public static string NameOf(this object o)
{
return o.GetType().Name;
}
}
Và sau đó sử dụng như thế này:
public class MyProgram
{
string thisClassName;
public MyProgram()
{
this.thisClassName = this.NameOf();
}
}
Dùng cái này
Giả sử Application Test.exe đang chạy và hàm là foo () trong form1 [về cơ bản nó là lớp form1 ], sau đó đoạn mã trên sẽ tạo ra phản hồi bên dưới.
string s1 = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name;
Điều này sẽ trở lại.
s1 = "TEST.form1"
cho tên chức năng:
string s1 = System.Reflection.MethodBase.GetCurrentMethod().Name;
sẽ trở lại
s1 = foo
Lưu ý nếu bạn muốn sử dụng điều này trong sử dụng ngoại lệ:
catch (Exception ex)
{
MessageBox.Show(ex.StackTrace );
}
[Nullable(2)]
để bạn nhận được cảnh báo khi kiểm tra null được kích hoạt.
this
có thể được bỏ qua. Tất cả bạn cần để có được tên lớp hiện tại là:
GetType().Name