如何检查循环类型?

时间:2013-04-29 14:49:02

标签: c#

我知道如何直接检查某个字段的类型。 但我怎么能实现这样的东西

    private bool checkJumpObstacle(Type type)
    {
        foreach (GameObject3D go in GameItems)
        {
            if (go is type) // won't accept 'type'
            {
                return true;
            }
        }
        return false;
    }

对于类型,我想将CarHouseHuman作为参数传递(这些都是类)。 但是这种代码不起作用。

1 个答案:

答案 0 :(得分:16)

编辑:如果你不能使它成为通用方法,使用Type.IsInstanceOfType实际上更容易:

private bool CheckJumpObstacle(Type type)
{
    return GameItems.Any(x =>type.IsInstanceOfType(x));
}

听起来你可能想要Type.IsAssignableFrom

if (go != null && type.IsAssignableFrom(go.GetType());

请注意,这是假设希望继承的类型匹配。

此外,如果可能的话,请使用泛型。除了其他任何东西,这将使该方法非常简单:

private bool CheckJumpObstacle<T>()
{
    return GameItems.OfType<T>().Any();
}

即使没有它,您仍然可以使用LINQ来简化:

private bool CheckJumpObstacle(Type type)
{
    return GameItems.Any(x => x != null && type.IsAssignableFrom(x.GetType()));
}

显然,如果你不期望任何空值,你可以摆脱无效检查。