Xamarin.Forms:比较 ImageSource

Xamarin.Forms: Comparing ImageSource

如果 cachePath 是一个字符串我可以这样做

if(value.Equals(this.cachePath, StringComparison.Ordinal))

现在 cachePath 的类型是 ImageSource。如果 valuecachePath 相同,我该如何比较?目前我正在这样做

if(this.cachePath == value)

这是唯一的方法吗?或者如何使用 Equals()

所以这归结为古老的“按引用传递”/“按值传递”讨论。

因为 ImageSource 是一个 引用类型 比较两个 ImageSources 将比较引用。 不是实际数据。

因为 String 是一个 值类型 比较 比较实际字符串而不是引用。

为了真正比较您的 ImageSource 想要转换为 Byte[] 并比较两个字节数组,因为它们将是 值类型

参考你的问题:

如果 this.cachePathvalue 是同一个 object。即:

this.cachePath = value
this.cachePath == value
//Returns true

BUT 如果 cachePath 是图像的副本 value 那么 EVENTHO 图像 ARE相同,因为它们的引用不指向同一个对象

this.cachePath = new ImageSource();
this.value = new ImageSource(cachePath.Source);
this.cachePath == Value 
// Returns False 

此问题的另一种替代解决方案是像这样创建您自己的自定义图像对象:

public class MyImage : Image
{
   public string CompareName { get; set; }
}

因此,MyImage class 将具有其基本图像 class 的每个 属性,此外,它还将具有一个 CompareName 属性。每当您设置对象的 ImageSource 时,您都可以为其命名,以便将来进行比较操作。我认为这将是比比较整个图像源文件更好的解决方案。