Έχω δει πολλούς ανθρώπους να χρησιμοποιούν τον ακόλουθο κώδικα:
Type t = typeof(obj1);
if (t == typeof(int))
// Some code here
Αλλά ξέρω ότι μπορείτε να κάνετε και αυτό:
if (obj1.GetType() == typeof(int))
// Some code here
Ή αυτό:
if (obj1 is int)
// Some code here
Προσωπικά, αισθάνομαι ότι το τελευταίο είναι το πιο καθαρό, αλλά μήπως υπάρχει κάτι που μου διαφεύγει; Ποιο είναι το καλύτερο για χρήση, ή είναι προσωπική προτίμηση;
Χρησιμοποιήστε το typeof
όταν θέλετε να λάβετε τον τύπο κατά τη χρονική στιγμή της μεταγλώττισης. Χρησιμοποιήστε το GetType
όταν θέλετε να λάβετε τον τύπο σε χρόνο εκτέλεσης. Σπάνια υπάρχουν περιπτώσεις για να χρησιμοποιήσετε το is
καθώς κάνει cast και, στις περισσότερες περιπτώσεις, καταλήγετε να κάνετε casting της μεταβλητής ούτως ή άλλως.
Υπάρχει και μια τέταρτη επιλογή που δεν έχετε σκεφτεί (ειδικά αν πρόκειται να κάνετε casting ενός αντικειμένου στον τύπο που θα βρείτε επίσης)- αυτή είναι να χρησιμοποιήσετε το as
.
Foo foo = obj as Foo;
if (foo != null)
// your code here
Αυτό χρησιμοποιεί μόνο ένα cast ενώ αυτή η προσέγγιση:
if (obj is Foo)
Foo foo = (Foo)obj;
απαιτεί δύο.
Πιστεύω ότι η τελευταία εξετάζει επίσης την κληρονομικότητα (π.χ. Dog is Animal == true), η οποία είναι καλύτερη στις περισσότερες περιπτώσεις.
Εξαρτάται από το τι κάνω. Αν χρειάζομαι μια τιμή bool (ας πούμε, για να καθορίσω αν θα κάνω cast σε int), θα χρησιμοποιήσω το is
. Αν πραγματικά χρειάζομαι τον τύπο για κάποιο λόγο (ας πούμε, για να τον περάσω σε κάποια άλλη μέθοδο), θα χρησιμοποιήσω την GetType()
.