tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^2: KeyedCollectionについて
投稿日: 2008/05/16(Fri) 18:20
投稿者kuroko
よねKEN様、早速の回答ありがとうございます。

> 何の例外がどこで発生していますか?(後述されているTypeLoadExceptionですか?)
> 例外が発生している箇所を見れば、問題箇所は特定できると思いますが。

書いたつもりだったのですが説明がわかりづらくなってしまい申し訳ありません。
作成したクラスで宣言した変数を中断モードの状態でマウスカーソルを当てると
"Count = 型 '{TypeLoadException}' の例外が発生しました"
というツールチップが表示されます。
ビルド自体は問題なく通り、実行時にも例外によって中断されることはありません。

よねKEN様が提示していただいた空実装で次のコードを実行していただき
2行目以降で中断モードにして変数xの上にマウスカーソルを合わせると
例外を確認できると思います。

  Dim x As New MyCollection(Of String, Object)
  x.Add("item1")

型パラメータの定義がTValueのみの場合は例外は発生しません。

> しかし、具体的に実装しようとした場合、
> TValue型がどんな型かを予め知っていないとこのメソッドを実装して
> TKey型を返すのは困難なように思います。(条件により不可能ではないと思いますが)
>
> そういう意味で、KeyedCollectionを継承する場合、
> TKeyやTValueについては閉じた型(型パラメータを含まない具体的な型)を
> 指定して継承するものではないかと思います。

実際の実装ではTValueはキーにする値を持った抽象クラス(独自に定義)のみに制約し、
その値の型はTKeyにより決定されるようにしているためGetKeyForItemメソッドの
戻り値を返すことができます。
抽象クラスを継承したクラスを定義するだけで色々な型に対応できるので
汎用的に利用できるかなと思ってこのような実装にしてみました。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。