DOBON.NET DOBON.NETプログラミング掲示板過去ログ

foreachで特定の型のみ抽出

環境/言語:[WinXP/.NET2.0(C#)]
分類:[.NET]

はじめまして

C#のforeachで、リスト中の特定の型だけ抽出ループさせたいのですが
方法がありましたらご教示ください。


現在の状態:
・ゲーム的なもの。
・List<Character>でキャラクタクラス型なリストを作っている
・Stalkerという、Characterを継承したクラスも同リストに保持している
 →メソッド・プロパティは変わらず。内部挙動のみ異なる
・objectでforeachを回し、isでStalkerかどうか見ている
 →ここでチェック処理、ループ回数を減らしたい…

試したこと:
・foreachの一時変数の型をStalkerにする
 →一時変数の型に合ったものだけ回してくれるかなと思ったけど
  Character型のインスタンスが来た時点でキャスト失敗の例外

よろしくお願いします
is 演算子で確認するのがまあ直接的な解決ですが。
NullObject パターンとか使うのがオブジェクト指向的かなぁ。
.NET3.0以降になってしまうかもしれませんが、OfTypeがあります。

foreach(var item in list.OfType<Stalker>)

的な感じで使えます。
> ・objectでforeachを回し、isでStalkerかどうか見ている
>  →ここでチェック処理、ループ回数を減らしたい…

速度面の性能向上ということであれば、
Stalkerだけのリストを予め用意しておき、こちらのリストで処理すればよいです。
(その分、別所でStalkerを追加する処理が増えるのと、リストの保持のためのメモリは食いますが)

ソースコードをすっきりさせたいだけなら、VC2008(.NET Framework 3.5)なら、
ヴァンさんの方法が使えますね。
返信ありがとうございます
遅くなってすみません;

VSは2008使っていますがターゲットが.NET2.0なので
isで判別する方法のままにします。

メモリ食うのがちょっと困るのと、ほとんどの処理で
2クラスとも一括して管理し、例外的に個別操作をしたいため
別リストを持たせるのはやめておきます

ありがとうございました
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板