Περισσότερα
Έλεγχος τύπου: typeof, GetType ή is?
Έχω δει πολλούς ανθρώπους να χρησιμοποιούν τον ακόλουθο κώδικα:
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
Προσωπικά, αισθάνομαι ότι το τελευταίο είναι το πιο καθαρό, αλλά μήπως υπάρχει κάτι που μου διαφεύγει; Ποιο είναι το καλύτερο για χρήση, ή είναι προσωπική προτίμηση;
1426
3
Χρησιμοποιήστε το
typeof
όταν θέλετε να λάβετε τον τύπο κατά τη χρονική στιγμή της μεταγλώττισης. Χρησιμοποιήστε τοGetType
όταν θέλετε να λάβετε τον τύπο σε χρόνο εκτέλεσης. Σπάνια υπάρχουν περιπτώσεις για να χρησιμοποιήσετε τοis
καθώς κάνει cast και, στις περισσότερες περιπτώσεις, καταλήγετε να κάνετε casting της μεταβλητής ούτως ή άλλως.Υπάρχει και μια τέταρτη επιλογή που δεν έχετε σκεφτεί (ειδικά αν πρόκειται να κάνετε casting ενός αντικειμένου στον τύπο που θα βρείτε επίσης)- αυτή είναι να χρησιμοποιήσετε το
as
.Αυτό χρησιμοποιεί μόνο ένα cast ενώ αυτή η προσέγγιση:
απαιτεί δύο.
Πιστεύω ότι η τελευταία εξετάζει επίσης την κληρονομικότητα (π.χ. Dog is Animal == true), η οποία είναι καλύτερη στις περισσότερες περιπτώσεις.
Εξαρτάται από το τι κάνω. Αν χρειάζομαι μια τιμή bool (ας πούμε, για να καθορίσω αν θα κάνω cast σε int), θα χρησιμοποιήσω το
is
. Αν πραγματικά χρειάζομαι τον τύπο για κάποιο λόγο (ας πούμε, για να τον περάσω σε κάποια άλλη μέθοδο), θα χρησιμοποιήσω τηνGetType()
.