두 개의 System.Drawing.Image
엔티티를 비교하려고하면 어떤 일이 잘못 될지 알 수 있습니까?C# 참조 비교
나는 메서드를 사용하여 반복적으로 구성되는 IEnumerable<Image> images
일부가 있습니다.
그러나 다음 코드는 내가 아주 이해할 수없는 결과를 얻을 수 :
foreach (var image1 in images)
{
foreach (var image2 in images)
{
if (image1 == image2)
{
// (Do something!)
}
}
}
건은 (Do something!)
부분이 호출되지 없구요 것입니다. System.Drawing.Image
가 마샬링을 사용하여 구현되기 때문에
디버거 화상 오브젝트 I 원시 메모리 포인터 가정 같이 nativeImage
라는 특성을 가지고 있음을 보여준다.
이 메모리 포인터은 항상 변경되며 여기에서 일종의 복제가 발생한다고 생각하지만 실제로 무엇을해야하는지 이해할 수 없습니다.
무엇이 잘못 되었습니까? IEnumerable<>
시퀀스에서 가져온 System.Drawing.Image
개체를 실제로 어떻게 비교할 수 있습니까?
고맙습니다. 이 분명히 작동하지 않았다
업데이트 ToList()
없이
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))
{
}
}
}
은 정말 바보입니다.
모두에게 감사드립니다.
실제로 ** 동일한 ** 이미지를 비교하고있는 이미지가 있습니까? – gideon
@ giddy 네, 서로 다른 크기의 두 이미지로 확인했습니다. * 분명히 같은 이미지를 가리 키지 만 다른 객체로 취급됩니다. * –
'Image.Equals'의 기능은 무엇입니까? – khachik