2016-03-22 71 views
0

如果cachePath將是一個字符串,我能做到這一點Xamarin.Forms:比較ImageSource的

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

現在cachePathImageSource類型。如何比較value是否與cachePath相同?目前我正在這樣做

if(this.cachePath == value) 

這是唯一的方法嗎?或者Equals()如何用於此?

+1

因爲'ImageSource'是一個'Reference Type',比較兩個'ImageSources'將比較參考。不是實際的數據。因爲'String'是一個'Value Type',所以比較將比較實際的字符串而不是參考。你想轉換爲一個'Byte []'並比較這兩個字節數組以得到一個真正的比較 – user1

+0

我認爲將整個圖像讀入一個'byte []'會非常耗時。沒有辦法知道引用是否指向相同的資源? – testing

+1

如果參考是相同的。即'this.cachePath'與'value'是同一個對象。即'this.cachePath = value',那麼這是檢查引用。但是如果'cachePath'是圖像'value'的副本,那麼EVENTHO的圖像是相同的圖像,因爲它們沒有指向同一個對象'cachePath == Value'會返回'false' – user1

回答

2

所以這歸結爲舊的「通過參考」/「通過價值」的討論。

因爲ImageSource參考類型比較兩個ImageSources將比較參考文獻。 不是的實際數據。

因爲String值類型比較WILL比較實際的字符串,而不是參考。

爲了您ImageSource的真正的比較需要轉換爲Byte[]和比較兩個字節數組,因爲這些將是值類型

參照你的問題:

如果this.cachePath是相同的對象作爲value。即:

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

如果cachePath是圖像value的副本,然後EVENTHOARE相同的圖像,因爲它們的引用沒有指向同一個對象

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