gpt4 book ai didi

C#引用比较

转载 作者:行者123 更新时间:2023-11-30 12:16:24 26 4
gpt4 key购买 nike

当您尝试比较两个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com