Jawaban lainnya semuanya mengandung kelalaian yang signifikan.
The is
Operator tidak tidak memeriksa apakah jenis runtime dari operan adalah persis jenis yang diberikan; sebaliknya, ia memeriksa apakah tipe runtime kompatibel dengan tipe yang diberikan:
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.
Tetapi memeriksa identitas tipe dengan refleksi memeriksa identitas , bukan untuk kompatibilitas
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
Jika bukan itu yang Anda inginkan, Anda mungkin menginginkan 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
typeof(Animal).IsInstanceOfType(x)
lebih pendek dan lebih mudah daripadatypeof(Animal).IsAssignableFrom(x.GetType());
(dan Resharper akan menyarankan menggunakan yang pertama jika Anda menggunakan yang terakhir).t
untuktypeof(Animal)
. Jadi bentuk Mark yang ditingkatkan menjadit.IsInstanceOfType(x)
.GetType()
ada di setiap jenis kerangka kerja, karena ditentukan padaobject
jenis dasar . Jadi, apa pun tipenya, Anda dapat menggunakannya untuk mengembalikan yang mendasarinyaType
Jadi, yang perlu Anda lakukan hanyalah:
sumber
Anda perlu melihat apakah Jenis instans Anda sama dengan Jenis kelas. Untuk mendapatkan jenis instance, Anda menggunakan
GetType()
metode:atau
harus melakukannya. Jelas Anda bisa menggunakan '==' untuk melakukan perbandingan jika Anda mau.
sumber
u.GetType.Equals(typeof(User));
t
yang berisi tipe.Untuk memeriksa apakah suatu objek kompatibel dengan variabel tipe tertentu, daripada menulis
kamu harus menulis
sumber