Кто-то знает, что может пойти не так, когда вы пытаетесь сравнить две 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()
это явно не сработало, я очень глупый.
Спасибо всем.