Các câu trả lời khác đều chứa thiếu sót đáng kể.
Nhà điều hành is
không không kiểm tra nếu kiểu thời gian chạy của các toán hạng là chính xác loại nhất định; đúng hơn, nó sẽ kiểm tra xem loại runtime tương thích với các loại nhất định:
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 cho loại sắc với kiểm tra phản ánh cho sắc, không phải cho tương thích
bool b3 = x.GetType() == typeof(Tiger); // true
bool b4 = x.GetType() == typeof(Animal); // false! even though x is an animal
Nếu đó không phải là những gì bạn muốn, thì có thể bạn muốn IsAssignableTừ:
bool b5 = typeof(Tiger).IsAssignableFrom(x.GetType()); // true
bool b6 = typeof(Animal).IsAssignableFrom(x.GetType()); // true! A variable of type Animal may be assigned a Tiger.
Nguồn
2012-05-02 14:51:39
Trong khi cách tiếp cận cuối cùng được hiển thị ở đây hoạt động, nó không cần thiết tiết lộ chi tiết. 'typeof (Animal) .IsInstanceOfType (x)' là ngắn hơn và đơn giản hơn 'typeof (Animal) .IsAssignableFrom (x.GetType());' (và Resharper sẽ gợi ý sử dụng cái cũ nếu bạn sử dụng cái sau). –