c#-与Properties.Resources.image的图像比较

您能告诉我以下条件为何错误吗?

List<Image> SelectedImages = new List<Image>();
SelectedImages.Add(Properties.Resources.my_image);
if (SelectedImages[0] == Properties.Resources.my_image)     // false
{
    ...
}

即使我写:

SelectedImages[0] = Properties.Resources.my_image;
if (SelectedImages[0] == Properties.Resources.my_image)     // false
{
    ...
}

如何进行比较?

最佳答案
它们不相等,因为Properties.Resources会制作图像的副本,并将该副本返回给您的代码.每次获取该图像时,实际上就是在创建一个全新的Image对象.之所以创建副本是因为资源通常应该像常量一样工作.如果您(例如)以某种方式修改了图片,则您不希望您的代码更改图片.

那么代码中会发生什么呢?最后,您比较了恰好包含相同数据的两个不同的图像对象. .NET看到您有两个不同的对象,并返回false.它不会进行“深度”比较,以查看对象是否具有相同的数据/状态.

以下是文章的链接,该文章从较高层次解释了发生了什么:https://navaneethkn.wordpress.com/2009/10/15/understanding-equality-and-object-comparison-in-net-framework/

解决问题的一种快速方法是逐像素比较资源图像和SelectedImage图像,以查看它们是否“相等”.这显然会表现不佳.另一种更有效的方法可能是构建字典并使用键来跟踪图像的原始来源.

转载注明原文:c#-与Properties.Resources.image的图像比较 - 代码日志