Xamarin.Forms:比较 ImageSource
Xamarin.Forms: Comparing ImageSource
如果 cachePath
是一个字符串我可以这样做
if(value.Equals(this.cachePath, StringComparison.Ordinal))
现在 cachePath
的类型是 ImageSource
。如果 value
与 cachePath
相同,我该如何比较?目前我正在这样做
if(this.cachePath == value)
这是唯一的方法吗?或者如何使用 Equals()
?
所以这归结为古老的“按引用传递”/“按值传递”讨论。
因为 ImageSource
是一个 引用类型 比较两个 ImageSources
将比较引用。 不是实际数据。
因为 String
是一个 值类型 比较 将 比较实际字符串而不是引用。
为了真正比较您的 ImageSource
想要转换为 Byte[]
并比较两个字节数组,因为它们将是 值类型
参考你的问题:
如果 this.cachePath
与 value
是同一个 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 时,您都可以为其命名,以便将来进行比较操作。我认为这将是比比较整个图像源文件更好的解决方案。
如果 cachePath
是一个字符串我可以这样做
if(value.Equals(this.cachePath, StringComparison.Ordinal))
现在 cachePath
的类型是 ImageSource
。如果 value
与 cachePath
相同,我该如何比较?目前我正在这样做
if(this.cachePath == value)
这是唯一的方法吗?或者如何使用 Equals()
?
所以这归结为古老的“按引用传递”/“按值传递”讨论。
因为 ImageSource
是一个 引用类型 比较两个 ImageSources
将比较引用。 不是实际数据。
因为 String
是一个 值类型 比较 将 比较实际字符串而不是引用。
为了真正比较您的 ImageSource
想要转换为 Byte[]
并比较两个字节数组,因为它们将是 值类型
参考你的问题:
如果 this.cachePath
与 value
是同一个 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 时,您都可以为其命名,以便将来进行比较操作。我认为这将是比比较整个图像源文件更好的解决方案。