2014-01-06 56 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,我将来会使用这个工具! –