Câu trả lời:
Các câu trả lời khác đều có thiếu sót đáng kể.
Các is
nhà điều hành không không kiểm tra xem loại thời gian chạy của các toán hạng là chính xác những loại nhất định; thay vào đó, nó sẽ kiểm tra xem kiểu thời gian chạy có tương thích với kiểu đã cho hay không:
class Animal {}
class Tiger : Animal {}
...
object x = new Tiger();
bool b1 = x is Tiger; // true
bool b2 = x is Animal; // true also! Every tiger is an animal.
Nhưng kiểm tra nhận dạng kiểu với kiểm tra phản chiếu để nhận dạng , không phải để tương thích
bool b5 = x.GetType() == typeof(Tiger); // true
bool b6 = x.GetType() == typeof(Animal); // false! even though x is an animal
or with the type variable
bool b7 = t == typeof(Tiger); // true
bool b8 = t == typeof(Animal); // false! even though x is an
Nếu đó không phải là những gì bạn muốn, thì bạn có thể muốn IsAssignableFrom:
bool b9 = typeof(Tiger).IsAssignableFrom(x.GetType()); // true
bool b10 = typeof(Animal).IsAssignableFrom(x.GetType()); // true! A variable of type Animal may be assigned a Tiger.
or with the type variable
bool b11 = t.IsAssignableFrom(x.GetType()); // true
bool b12 = t.IsAssignableFrom(x.GetType()); // true! A
t
cho typeof(Animal)
. Vì vậy, hình thức cải tiến của Mark trở thành t.IsInstanceOfType(x)
.
GetType()
tồn tại trên mọi kiểu khuôn khổ đơn lẻ, bởi vì nó được định nghĩa trên object
kiểu cơ sở . Vì vậy, bất kể loại nào, bạn có thể sử dụng nó để trả vềType
Vì vậy, tất cả những gì bạn cần làm là:
u.GetType() == t
Bạn cần xem liệu Kiểu của cá thể của bạn có bằng Kiểu của lớp hay không. Để lấy loại phiên bản, bạn sử dụng GetType()
phương pháp:
u.GetType().Equals(t);
hoặc là
u.GetType.Equals(typeof(User));
Hãy làm nó. Rõ ràng là bạn có thể sử dụng '==' để so sánh nếu muốn.
u.GetType.Equals(typeof(User));
t
chứa kiểu.
Để kiểm tra xem một đối tượng có tương thích với một biến kiểu nhất định hay không, thay vì viết
u is t
bạn nên viết
typeof(t).IsInstanceOfType(u)
typeof(Animal).IsInstanceOfType(x)
ngắn hơn và đơn giản hơntypeof(Animal).IsAssignableFrom(x.GetType());
(và Resharper sẽ đề xuất sử dụng cái trước nếu bạn sử dụng cái sau).