当您尝试比较两个 System.Drawing.Image
实体时,可能会出现什么问题?
我有一些使用 Image.FromFile(path)
方法迭代构建的 IEnumerable<Image> images
。
但是以下代码产生了我无法理解的结果:
foreach (var image1 in images)
{
foreach (var image2 in images)
{
if (image1 == image2)
{
// (Do something!)
}
}
}
问题在于
(Do something!)
部分从未被调用。调试器显示图像对象有一个名为
nativeImage
的属性,我猜测这是一个原始内存指针,因为System.Drawing.Image
使用了封送实现。这个内存指针一直在变化,我猜想这里发生了某种克隆,但我不知道该做什么。 我做错了什么,如何比较从一个
IEnumerable<>
序列中获取的System.Drawing.Image
对象是否相同?
谢谢。
更新
var paths = new List<String> {"Tests/1_1.jpg", "Tests/1_2.jpg"};
IEnumerable<Image> images = paths.Select(path => Image.FromFile(path)).ToList();
foreach (var image1 in images)
{
foreach (var image2 in images)
{
if (ReferenceEquals(image1, image2))
{
}
}
}
< p > < em > < strong > 没有使用 < code > ToList() ,很明显这不起作用,我非常愚蠢。 < / strong > < / em > < / p >
< p > 感谢大家。 < / p >