User u = new User();
Type t = typeof(User);
u is User -> returns true
u is t -> compilation error
Bazı değişkenlerin bu şekilde bir tür olup olmadığını nasıl test ederim?
Yanıtlar:
Diğer cevapların tümü önemli eksiklikler içermektedir.
is
Operatör yok değil operandin zamanı tür olup olmadığını kontrol tam olarak verilmiş tipi; bunun yerine, çalışma zamanı türünün verilen türle uyumlu olup olmadığını kontrol eder :
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.
Ancak yansıma ile tür kimliğini kontrol etmek uyumluluk için değil, kimlik için kontroller
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
İstediğiniz bu değilse, muhtemelen IsAssignableFrom'u istiyorsunuz:
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
için typeof(Animal)
. Böylece Mark'ın geliştirilmiş formu olur t.IsInstanceOfType(x)
.
GetType()
her bir çerçeve türünde bulunur, çünkü temel object
türde tanımlanır . Dolayısıyla, türün kendisinden bağımsız olarak, temelini döndürmek için kullanabilirsiniz.Type
Yani yapmanız gereken tek şey:
u.GetType() == t
Örneğinizin Türünün sınıfın Türüne eşit olup olmadığını görmeniz gerekir. GetType()
Yöntemi kullandığınız örneğin türünü almak için :
u.GetType().Equals(t);
veya
u.GetType.Equals(typeof(User));
yapmalı. Açıkçası, isterseniz karşılaştırmanızı yapmak için '==' kullanabilirsiniz.
u.GetType.Equals(typeof(User));
t
türü içeren bir değişkene sahip olmasına rağmen onu böyle gönderdim .
Bir nesnenin belirli bir tür değişkenle uyumlu olup olmadığını kontrol etmek için, yazmak yerine
u is t
yazmalısın
typeof(t).IsInstanceOfType(u)
typeof(Animal).IsInstanceOfType(x)
olduğundan daha kısadır ve daha basittirtypeof(Animal).IsAssignableFrom(x.GetType());
(ve eğer ikincisini kullanırsanız Resharper ilkini kullanmanızı önerir).