System.RuntimeType
là một lớp cụ thể dẫn xuất từ lớp cơ sở trừu tượng System.Type
. Vì System.RuntimeType
không công khai, bạn thường sẽ gặp phải các trường hợp của nó như System.Type
.
Sự nhầm lẫn có thể phát sinh khi bạn đang cố gắng lấy kiểu của một đối tượng và gọi nhầm GetType()
một đối tượng khác đại diện cho kiểu của đối tượng đầu tiên, thay vì chỉ sử dụng trực tiếp đối tượng đó. Sau đó Type.ToString()
sẽ trả về "System.RuntimeType"
khi đối tượng mà nó được gọi đại diện cho một Loại:
string str = string.Empty;
Type strType = str.GetType();
Type strTypeType = strType.GetType();
strType.ToString();
strTypeType.ToString();
Ví dụ: trong bài đăng blog này, ai đó đang cố gắng lấy loại cột trong cơ sở dữ liệu, hãy làm như sau:
object val = reader.GetFieldType(index);
Type runtimeType = val.GetType();
PropertyInfo propInfo = runtimeType.GetProperty("UnderlyingSystemType");
Type type = (Type)propInfo.GetValue(val, null);
Vì val đã là một đối tượng Kiểu nên val.GetType () sẽ trả về một đối tượng Kiểu khác đại diện cho kiểu System.RuntimeTime
vì đây là kiểu cụ thể được sử dụng để đại diện cho đối tượng kiểu gốc. Bài đăng trên blog sau đó cho thấy một số thủ thuật phản ánh không cần thiết, để có được loại đối tượng loại ban đầu, khi thực sự tất cả những gì được yêu cầu là:
Type type = reader.GetFieldType(index) as Type;
Vì vậy, nếu Type
đối tượng của bạn đang báo cáo rằng nó đại diện cho a System.RuntimeType
, hãy đảm bảo rằng bạn đã không vô tình gọi GetType()
đến một kiểu mà bạn đã có.