
VB.Net/C# .NET Framework2.0で開発しております。
下記コード例のように、イテレータループ内(For Each文)でのコレクションの変更(要素の削除)ができないため、苦肉の策として下のように削除する予定のものを格納するバッファ(removeList)に一度登録し、その後もう一度ループをまわして実際に削除する、というコードを書いておりますが、分量も多くなり、一時変数なども出てくるため、あまりよいコードとは言えないと思います。
コレクションから特定の条件を満たした要素を削除するための、もうすこしスマートな書き方はないものでしょうか?
宜しくお願いいたします。
Dim removeList as new List(Of TestClass)
For Each e as TestClass in targetList
If e.IsDummy Then
'直接targetList.Remove(o) とはできない
removeList.Add(o)
End If
End For
For Each e as TestClass in removeList
targetList.Remove(e)
End For
No.2ベストアンサー
- 回答日時:
List(Of T)のRemoveAllで削除したほうがいいかもしれませんよ
' 削除条件を決定する関数を準備
Private Function myCheck( obj as TestClass) as Boolean
return obj.IsDummy
End Function
呼び出し方
targetList.RemoveAll( AddressOf myCheck )
といった具合にしてやれば IsDummyがTrueになっているアイテムをすべて削除してくれますよ
あなた様は本当に神様か何かだと思います。本当にありがとうございました。本当に感謝しています。重ね重ね本当にありがとうございました。
No.1
- 回答日時:
意図されている事かどうか分かりませんが。
。これでどうですか
For i As Integer = 0 To targetList.Count - 1
Dim cls As TestClass = targetList(i)
If cls Is Nothing Then
Continue For
End If
If cls.IsDummy Then
targetList.Remove(cls)
End If
Next
この回答への補足
ご回答ありがとうございます。
確かにこの方法でもできそうですね。一点、普段コレクションの走査でインデックスループをあまり用いないので、targetListからリアルタイムにRemoveしてしまった後の歯抜けリストの走査は正常に動作するのか不安があります(インデックスがずれたり等)。後で検証してみます。
その他、なるべくならFor Eachループを用いて簡潔な記法で書きたいと考えておりますので、他の方法もありましたら宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Yahooフリマってどれくらい時間...
-
ウェブページへのアクセス不可 ...
-
喧嘩をしてLINE削除され、 また...
-
VBA:Openステートメントで開い...
-
教えて!gooはすぐに質問を削除...
-
outlook迷惑メールフォルダーに...
-
mp3の埋め込み画像の削除ができ...
-
フェイスブック 検索履歴削除
-
回答して解決したとお礼があっ...
-
インスタグラムのギャラリーの...
-
教えて!gooのヘルプには 1ヶ月...
-
これはやらせですよね?
-
言論統制を受けたことはありま...
-
アクセスにおいて間違って削除...
-
(Access)複数条件の重複デー...
-
google chromeのブックマークが...
-
政府にとって都合の悪い情報は...
-
エクセル 関数 指定の繰り返し...
-
YouTubeの初期音量が最大になり...
-
今日の日付が過ぎたらその行を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えてgooでガイドライン違反と...
-
教えてgooでコメントしてすぐ消...
-
先ほどした質問が削除されまし...
-
Yahooフリマってどれくらい時間...
-
言論統制を受けたことはありま...
-
スマホのアプリを削除すると、...
-
outlook迷惑メールフォルダーに...
-
告白してフラれた相手の連絡先...
-
指定した文字があった場合、そ...
-
Windows11に残されたWindows10...
-
もう関わりたくない人がいたらL...
-
ATMに登録されている振込先を削...
-
VBA:Openステートメントで開い...
-
ウェブページへのアクセス不可 ...
-
アクセスにおいて間違って削除...
-
バッチファイルを使用したsql@p...
-
喧嘩をしてLINE削除され、 また...
-
これはやらせですよね?
-
エクセルで住所の混在する「丁...
-
ORA-14452について
おすすめ情報