传入类型进行检查

时间:2010-01-12 12:56:49

标签: c# generics types

我有一个方法,我正在检查循环中的当前对象是否与我传入方法的类型相同。

首先,我将类型作为字符串传递给方法,然后使用:

item.GetType().ToString().Equals(myType);

我真正喜欢做的是使用is关键字来执行:

item is myType

我遇到的问题是将myType传递给方法。我需要使用某种时髦的泛型类型吗?我在一个类型的引用中传递什么类型?

3 个答案:

答案 0 :(得分:1)

您可以使用普通等式运算符:

item.GetType() == myType;

如果item属于myType描述的确切类型,则返回true。请注意,如果存在任何差异,它将返回false

class A { }
class B : A { }

B item = new B();
Type myType = typeof(A);
bool sameType = item.GetType() == myType; // this will be false

了解Type个对象的一件好事是找到in the documentation的文本:

  

表示类型的Type对象   是独特的;也就是说,有两个Type个对象   引用引用相同的对象if   并且只有它们代表相同   类型。这允许比较   使用引用相等的Type个对象。

答案 1 :(得分:1)

你的意思是:

    public List<T> GetItemsOfType<T>(List<object> allObjects)
    {
        return allObjects.Where(o => o is T).Cast<T>().ToList();
    }

然后用

之类的东西打电话
var result = GetItemsOfType<MyType>(myObjects);

答案 2 :(得分:1)

是这样的吗?

public static bool ContainsType<T>()
{
    object[] objects = new object[] { };

    foreach (var o in objects)
    {
        if (o is T)
        {
            return true;
        }
    }

    return false;
}

public static void Main(string[] args)
{
    ContainsType<int>();
}