4

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

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

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

4

1 回答 1

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()));
}

显然,如果您不期望任何空值,则可以摆脱空值检查。

于 2013-04-29T14:50:56.647 回答