当您尝试比较两个 System.Drawing.Image
时,有人知道会出什么问题吗?实体?
我有一些 IEnumerable<Image> images
,它是使用 Image.FromFile(path)
迭代构建的方法。
但是下面的代码产生了我不太明白的结果:
foreach (var image1 in images)
{
foreach (var image2 in images)
{
if (image1 == image2)
{
// (Do something!)
}
}
}
问题是 (Do something!)
部分永远不会被调用。
调试器显示图像对象有一个名为 nativeImage
的属性,我假设它是一个原始内存指针,因为 System.Drawing.Image
使用编码实现。
这个内存指针一直在变化,我猜这里发生了某种克隆,但我不明白我应该做什么。
我做错了什么,我怎么能比较System.Drawing.Image
从一个 IEnumerable<>
中取出的物体看看它们是否相同?
谢谢。
更新
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))
{
}
}
}
没有 ToList()
,这显然不行,我很笨。
谢谢大家
最佳答案
请记住,每次调用 GetEnumerator
时,您都会看到每次调用 MoveNext
时都会返回新对象。您需要做的是将迭代强制放入列表中。
var imageList = images.ToList();
关于C#引用比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5462463/