2017-06-01 47 views
1

每次我寫一個值轉換器我想知道如何處理在ConvertConvertBack方法IValueConverter的規定targetType參數的目標類型參數:我應該使用的IValueConverter

object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 

我注意到許多實現使用targetType簡單地通過檢查它(if (targetType == typeof(RequiredType)))和投擲一些例外或返回空值,如果類型不喜歡預期:

但也有很多人(我認爲這是大多數)是完全無視參數:

我試圖找到一些指導或使用參數的提示,但不幸的是我什麼都沒發現。 兩種方法都在做他們的工作,但更正確的方法之一?這些方法的優點和缺點是什麼?我應該忽略還是使用參數?

我個人的觀點並不是檢查參數,以允許轉換器的使用更靈活,但我很高興得到您的意見。

+0

該參數的意義在於調用者將告訴你要將其轉換爲什麼;如果你總是忽略它們並返回相同的結果,那麼與檢查並拋出異常相比,它不會更「靈活」。同樣,如果他們只是要求你要回來的東西,那又如此:它實際上並不是更靈活。在大多數情況下,你只能轉換成一件事,所以它很少是真正的問題,因此很多代碼忽略它。 –

回答

0

呼叫者會告訴你什麼是理想的類型轉換值:

  1. 如果你知道你總是會轉換成一種類型,例如true/falseVisibility,那麼你可以忽略targetType。很明顯,如何使用轉換器,不需要拋出異常。
  2. 基於targetType轉換該值,例如,使用轉換器轉換爲ImageSourceBrush。在第一種情況下,您希望生成圖像(例如錯誤圖像),而另一種情況下需要簡單的顏色(例如紅色)。
  3. 如果您知道某人可能會將您的轉換器與targetType一起使用,那麼您不希望這樣做,並且支持與否也不明顯,那麼您可以通過拋出異常來警告開發人員。

我認爲最常見的情況是1)。