0
Dictionary<string,object> dict = new Dictionary <string,object>();

dict" " を他のオブジェクトでインスタンス化できますか?

例えば:

dict = new Dictionary<string,bitmap>();

また:

dict = new Dictionary<string, Image>();
4

2 に答える 2

5

いいえ、Dictionary<string, object>Dictionary<string, Bitmap>は2つの異なるタイプであるためです。

次のシナリオで何が起こるか想像してみてください。

Dictionary<string, Bitmap> bmpDict = new Dictionary<string, Bitmap>();
Dictionary<string, object> dict = bmpDict;
dict.Add("someKey", 42);

dictの値はに入力されているため、コンパイラはそれをコンパイルする必要があります。objectしたがって、intこれは有効な選択です。Bitmapただし、これは、値のみを受け入れるインスタンス化されたディクショナリと衝突します。

Bitmap someBmp = bmpDict["someKey"];

明らかに、値はBitmapの宣言およびインスタンス化されたタイプに従ってである必要がありますbmpDictが、上記で見たように、ではないものが変数Bitmapを介して追加されました。dictご覧のとおり、型安全性は破られています。

したがって、Dictionary<string, object>およびDictionary<string, Bitmap>を相互に割り当てることはできません。

于 2013-01-17T08:09:06.010 に答える
0

直接の質問に答える場合。
として立証することは不可能です

Dictionary<string, object> dick; 
dick = new Dictionary<string, Image>();

dickは、Imageタイプのオブジェクトのみの値を保持できるディクショナリと矛盾する任意のタイプのオブジェクトを保持できるディクショナリタイプとして宣言されている ためです。

もちろん、あなたはどんなタイプの値でも ディックを埋めることができます。

更新:OR Mapperによる説明と、それを正しく解釈する方法
についてはまだ疑問があります。

そのような論理はあまり説明しません。

1)

Bitmap someBmp = bmpDict["someKey"];

として働くべきだった

object someBmp = bmpDict["someKey"];

2)
このロジックでは、次のようにインスタンス化することは不可能でした。

object obj = new Image();
obj = new BitmapImage();

しかし、それは可能です。

IMO、ここでの要点は、タイプの辞書です

  • Dictionary <string, Image>()

タイプのディクショナリが同じ(または互換性のあるサブ)タイプの値のみを含むことができます

  • Dictionary<string, object>

異なるの?

于 2013-01-17T08:11:36.813 に答える