4

フィールドのタイプを直接確認する方法を知っています。しかし、どうすればこのようなものを実装できますか

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

Carタイプについては、 、Houseまたはパラメーターとして渡したいと思いHumanます(これらはすべてクラスです)。しかし、この種のコードは機能しません。

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

明らかに、null 値を期待しない場合は、nullity チェックを取り除くことができます。

于 2013-04-29T14:50:56.647 に答える