tk-engineering.com Technical blog

To explore strange new systems.
To seek out new bugs and new coding horrors.
To boldly go where no man has not wanted to go before.
List(Of T).Remove で要素が見つからなかった時
List(Of T) でも、Dictionary(Of TKey,TValue) でも、要素を削除するのに Remove メソッドを使う訳ですが、その要素が見つからなかった場合でも、Exception は Throw されません。
Microsoft.VisualBasic.Collection.Remove や System.Collections.SortedList.Remove は Exception を投げてくれます。

その代わりに、動作結果を Boolean で返却してくれます−削除すべき要素が無かったら、"FALSE"を返してくれます。
( System.Collections.ArrayList は何も返してくれません。)

なので、List(Of T) や Dictionary(Of TKey,TValue)で「きちんと削除されたか確認したい」場合には、返値を判断することになります。


なんでこんなことを書いているのか。先日、「RemoveしているはずなのにRemoveされていない」という事象に出会ったのですが、そのコード(判りやすくするためにかなり簡略化しています)。
[VB.NET]
'HogeCollection は List(Of Hoge)
Dim lstHoge As New HogeCollection
lstHoge.Add(New Hoge("1","1"))
lstHoge.Add(New Hoge("2", "2"))
'中略...
lstHoge.Remove(New Hoge("1","1"))
'↑
'ここが問題箇所:Remove されません

この問題箇所で返値を見てみると、FALSEになっている訳です。

で、これをこんな風に直してみました。

[VB.NET]
'HogeCollection は List(Of Hoge)
Dim lstHoge As New HogeCollection
lstHoge.Add(New Hoge("1","1"))
lstHoge.Add(New Hoge("2", "2"))
'中略...
lstHoge.Remove(lstHoge.Item("1","1"))
'↑
'中から探し出してきてRemoveする。これは動く。


各メンバが全く同じオブジェクトを作って、それに「替え玉」させようったって、それはいけませんよ−という例でした。
| tkinugaw | .NET | 17:45 | comments(1) | trackbacks(0) |
Removeメソッドの戻り値がBooleanなあたり、なんか懐かしいというか、なんというか・・・。
先祖返りな感じがして、「それは、ちょっとどうなの?」と言いたくなります。
| NAL-6295 | 2008/09/22 1:31 PM |









http://blog.tk-engineering.com/trackback/800138
   1234
567891011
12131415161718
19202122232425
2627282930  
<< September 2010 >>
# RECOMMEND
# RECOMMEND
ピープルウエア 第2版 − ヤル気こそプロジェクト成功の鍵
ピープルウエア 第2版 − ヤル気こそプロジェクト成功の鍵
トム・デマルコ, ティモシー・リスター, 松原 友夫, 山浦 恒央
# RECOMMEND
コンサルタントの秘密―技術アドバイスの人間学
コンサルタントの秘密―技術アドバイスの人間学
G.M.ワインバーグ,木村 泉,ジェラルド・M・ワインバーグ
# RECOMMEND
プログラミングの心理学―または、ハイテクノロジーの人間学
プログラミングの心理学―または、ハイテクノロジーの人間学
ジェラルド・M.ワインバーグ, 木村 泉, 角田 博保, 久野 靖, 白浜 律雄
# RECOMMEND
ソフトウェア開発のダイナミズム
ソフトウェア開発のダイナミズム
ジム マッカーシー, Jim McCarthy, 三浦 明美, 福崎 俊博
# RECOMMEND
熊とワルツを - リスクを愉しむプロジェクト管理
熊とワルツを - リスクを愉しむプロジェクト管理
トム・デマルコ, ティモシー・リスター, 伊豆原 弓
# RECOMMEND
人月の神話―狼人間を撃つ銀の弾はない
人月の神話―狼人間を撃つ銀の弾はない
Jr.,フレデリック・P. ブルックス, Frederick Phillips,Jr. Brooks, 滝沢 徹, 富沢 昇, 牧野 祐子
# RECOMMEND
Code Complete第2版〈上〉―完全なプログラミングを目指して
Code Complete第2版〈上〉―完全なプログラミングを目指して
スティーブ マコネル, Steve McConnell, クイープ
# RECOMMEND
Code Complete第2版〈下〉―完全なプログラミングを目指して
Code Complete第2版〈下〉―完全なプログラミングを目指して
スティーブ マコネル, Steve McConnell, クイープ
# RECOMMEND
デッドライン―ソフト開発を成功に導く101の法則
デッドライン―ソフト開発を成功に導く101の法則
トム デマルコ, Tom DeMarco, 伊豆原 弓
# RECOMMEND
新訳 ソフトウェアプロジェクトサバイバルガイド
新訳 ソフトウェアプロジェクトサバイバルガイド
スティーブ マコネル, Steve McConnell, アルテアジャパン, 久手堅 憲之
# RECOMMEND
ソフトウエア開発 55の真実と10のウソ
ソフトウエア開発 55の真実と10のウソ
ロバート・L・グラス, 山浦 恒央
# RECOMMEND
ソフトウェア開発201の鉄則
ソフトウェア開発201の鉄則
アラン・M. デービス, Alan M. Davis, 松原 友夫
# RECOMMEND
リファクタリング―プログラムの体質改善テクニック
リファクタリング―プログラムの体質改善テクニック
マーチン ファウラー, Martin Fowler, 児玉 公信, 平澤 章, 友野 晶夫, 梅沢 真史
# RECOMMEND
Joel on Software
Joel on Software
Joel Spolsky, 青木 靖
# RECOMMEND
デスマーチ 第2版 ソフトウエア開発プロジェクトはなぜ混乱するのか
デスマーチ 第2版 ソフトウエア開発プロジェクトはなぜ混乱するのか
エドワード・ヨードン, 松原 友夫, 山浦 恒央
# RECOMMEND
# RECOMMEND
# RECOMMEND
# RECOMMEND
プログラミングMicrosoft ADO.NET
プログラミングMicrosoft ADO.NET
David Sceppa, 日本ユニテック
# RECOMMEND
# RECOMMEND
デスマーチ 第2版 ソフトウエア開発プロジェクトはなぜ混乱するのか
デスマーチ 第2版 ソフトウエア開発プロジェクトはなぜ混乱するのか
エドワード・ヨードン, 松原 友夫, 山浦 恒央
# RECOMMEND
ライト、ついてますか―問題発見の人間学
ライト、ついてますか―問題発見の人間学
ドナルド・C・ゴース, G.M.ワインバーグ, 木村 泉
# RECOMMEND
コンサルタントの道具箱
コンサルタントの道具箱
ジェラルド・M・ワインバーグ, 伊豆原 弓
' RECENT COMMENTS
# RECENT TRACKBACK
# CATEGORIES
# ARCHIVES
-> LINKS
# COUNTERS
カウンタ設置以来…
今日…
昨日は…


Stats [since 09/09/06]
- PROFILE