0

特定の型のみをチェックして返す foreach のバージョンがあるかどうか疑問に思っていました。

たとえば、次のクラス ツリーを考えてみましょう。

org.clixel.ClxBasic -> org.clixel.ClxObject -> org.clixel.ClxSprite -> WindowsGame1.test

次に、このコードを検討してください

public List<ClxBasic> objects = new List<ClxBasic>();

foreach(GroupTester tester in objects)
{
    tester.GroupTesterOnlyProperty = true;
}

tester.GroupTesterOnlyProperty は、GroupTester で作成されたプロパティです。foreach のオーバーロード、または私を助ける可能性のある別のスニペットなど、このようなものを機能させる方法はありますか? プログラマーが必要な型だけを取得するリストを簡単に並べ替えられるようにしたいと考えています。

4

2 に答える 2

8

OfType<T>オブジェクトの拡張メソッドを使用できIEnumerable<T>ます。

ループは次のようになります。

foreach(GroupTester tester in objects.OfType<GroupTester>())
{
    tester.GroupTesterOnlyProperty = true;
}

注:GroupTesterこれは、 がから継承されていることを前提としていClxBasicます。

于 2012-06-26T09:14:59.433 に答える
3
foreach(GroupTester tester in objects.OfType<GroupTester>())
{
    tester.GroupTesterOnlyProperty = true;
}

@ThePower によって提案された (そして削除された) ように、すべてのオブジェクトを反復処理して、型を明示的にチェックすることができます。

foreach(var tester in objects)
{
    if (tester is GroupTester)
    {
       (tester as GroupTester).GroupTesterOnlyProperty = true;
    }
}
于 2012-06-26T09:16:51.487 に答える