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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) outlook マクロが終了しません。 1 2022/09/02 11:14
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Excel(エクセル) エクセルシート中の全角英数字を半角に変換したい 4 2022/07/07 13:14
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Visual Basic(VBA) 形式を選択して貼り付け 以下のコードで「元」シートと「先」シートのA列に同じ値があったら指定範囲をコ 5 2022/11/11 07:30
- Visual Basic(VBA) シート削除のマクロで「deleteメソッドは失敗しました」となります。助けてください! Sub 不要 6 2022/09/08 16:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA:Openステートメントで開い...
-
教えて!gooにはどのカテゴリが...
-
職場の人と仕事中に喧嘩して LI...
-
日テレニュースHP、記事削除は...
-
同じ質問
-
指定した文字があった場合、そ...
-
エクセルVBAで行削除時にエラー...
-
バッチファイルを使用したsql@p...
-
喧嘩をしてLINE削除され、 また...
-
アクセスにおいて間違って削除...
-
エクセルで下の空白行を削除したい
-
インスタグラムのギャラリーの...
-
エクセルで住所の混在する「丁...
-
Facebookメッセンジャーの不具合
-
(Access)複数条件の重複デー...
-
もう関わりたくない人がいたらL...
-
Facebookに自分が四つもアップ...
-
Excel 数式を入れているため、...
-
メーリングリストから特定の人...
-
動的に作成したコントロールの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
もはや喧嘩売ってるのか私(笑...
-
回答がついてる普通の質問まで...
-
指定した文字があった場合、そ...
-
VBA:Openステートメントで開い...
-
AI削除には数多のキーワード設...
-
インスタグラムのギャラリーの...
-
バッチファイルを使用したsql@p...
-
Yahooフリマってどれくらい時間...
-
Facebookメッセンジャーの不具合
-
削除の対象について
-
エクセルで住所の混在する「丁...
-
ビジネスパートナーから送られ...
-
女友達にLINEしたら、既読スル...
-
もう関わりたくない人がいたらL...
-
喧嘩をしてLINE削除され、 また...
-
猫にグラグラの熱湯かける動画...
-
すべてやりきった、大満足を意...
-
インスタアカウント、前の携帯...
-
Facebookに自分が四つもアップ...
-
Facebookで間違ってスートリー...
おすすめ情報