2014-01-06 76 views
1

在C#.NET中,ImageList.ImageCollection.Add(String,Image)如何處理重複鍵?它會用相同的密鑰覆蓋條目,還是丟棄/不操作?這個函數的MSDN文檔是裸露的,並沒有提到這方面的行爲。ImageList.ImageCollection如何處理重複?

+1

你爲什麼不試試?它可能會比等待答案更快...... –

+0

也很有趣:RemoveByKey()中的「關鍵比較不區分大小寫」http://msdn.microsoft.com/en-us/library/system。 windows.forms.imagelist.imagecollection.removebykey(v = vs.110).aspx –

+0

@ThomasLevesque我沒有提到獲得快速答案非常重要。如果你不知道獅子襲擊了人類,你會用棍子捅一下發現嗎?你的評論很愚蠢,完全沒有幫助。 –

回答

1

我查看了ImageList.ImageCollection的來源,我看不到任何重複密鑰檢查代碼。

在內部,ImageCollection使用ImageInfoArrayList一個類存儲鍵(ImageInfo包含一個字符串Key字段)。它的操作實際上是效率低下的,因爲它不是散列表,而是通過迭代ArrayList中的每個存儲的ImageInfo並返回第一個匹配的索引(即O(n)搜索)執行字符串查找,se ImageList.ImageCollection.IndexOfKey。因此使用相同的密鑰添加第二個圖像將導致該圖像無法通過密鑰訪問,但仍可通過索引訪問該圖像。

1

查看Reflector中的代碼,它在內部使用ArrayList存儲密鑰,所以當您通過密鑰訪問圖像時,它將返回使用該密鑰添加的第一個項目。

+0

提及反射器+1,我將來會使用這個工具! –