C#引用比较

标签 c# image reference comparison marshalling

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

相关文章:

c++ - 我有一个指向对象的指针。如何调用需要引用的函数?

c# - 如何在 C# 中发出 http 请求并获得响应

c# - 如何为我的 Web 应用程序创建 MSI?

c# - Linq Left join, where, group by, count()

c# - 在帮助文件中嵌入代码区域

c# - 位图 PNG 保存而不修改

android - 尝试了解 Android 布局、图像大小和关系

java - 使用 Transparency.OPAQUE 的 createCompatibleImage 和使用 BufferedImage.TYPE_INT_ARGB 的简单 BufferedImage 构造函数有什么区别?

c++ - MISRA C++ 规则 7-1-1 会影响引用吗?

c - 对 gcc pthreads C 中函数的 undefined reference