如何检查对象是否不是特定类型?

时间:2012-05-11 10:32:58

标签: c# c#-4.0

我想检查对象是否不是特定类型。我知道如何检查特定类型的

if (t is TypeA)
{
   ...
}

但是

if (t isnt TypeA)
{
   ...
}   

不起作用。

7 个答案:

答案 0 :(得分:55)

C#不是很自然的语言;) 使用这个

if(!(t is TypeA))
{
   ...
}

答案 1 :(得分:10)

如果您不仅要检查,还可以使用as运算符。

var a = t as TypeA;
if(a!= null)
   //use a.. 

通过这种方式,如果你想在检查后使用一个类型,你可以避免双重转换..

答案 2 :(得分:4)

如果您在if块中执行TypeA x = (TypeA)t;,那么更好的方法是

TypeA x = t as TypeA
if(x != null)
{
...
}

这只会导致一次类型检查而不是两次。

答案 3 :(得分:4)

救援的扩展方法!!

public static class ObjectExtensions
{
    public static bool Isnt(this object source, Type targetType)
    {
        return source.GetType() != targetType;
    }
}

用法

if (t.Isnt(typeof(TypeA)))
{
   ...
}

答案 4 :(得分:2)

我通常在一行中粘贴null并键入check:

if (t == null || !(t is TypeA)) {
  ...
}

如果TypeA是一个结构,你需要再次略微区别地处理它:

if (t == null || t.GetType() != typeof(TypeA)) {
  ...
}

答案 5 :(得分:0)

请查看以下getType()示例:

object obj = new object();
obj.GetType();

string s;
s.GetType();

List<string> StringList = new List<string>();
StringList.GetType();

答案 6 :(得分:0)

简短答案:您可能要使用:

if (t.GetType()==typeof(TypeA))
{
   ...
}
if (t.GetType()!=typeof(TypeA))
{
  ...
}

长答案:

所以。请注意,您在询问它是否为特定类型。 is不会告诉您它是否是特定类型,而是告诉您它是特定类型还是该类型的任何后代。

因此,如果您有Animal和Cat这两个类:Animal,而felix是猫,则

if (felix is Animal)
{
    //returns true
}
if (felix.GetType() == typeof(Animal))
{
    //does not
}

如果这对您而言并不重要,则可以使用继承的类,那么不必担心,可以像其他人所说的那样使用!(felix is Animal),就可以了! (您可能还不错。)

但是,如果您需要确定felix是动物,那么您需要询问t.GetType()==typeof(TypeA)