2013-01-04 59 views
2

基本上我有一個具有以下簽名的方法:爲什麼我不能使用BindingList <TInherited>作爲一個參數來使用BindingList的方法<T>?

public void Save(BindingList<T> items); 

,我嘗試使用

classInstance.Save(items); //items = BindingList<ObjectInheritedFromT> 

調用它,但它似乎C#不知道繼承拋出一個編譯期時間錯誤,其中爲T編寫的所有代碼對於ObjectInheritedFromT也完全有效,對嗎?

有沒有解決這個問題的方法?我意識到這項工作,如果它是IEnumerable,但然後(奇怪的是)結果BindingList<>沒有實現IEnumerable,我需要執行操作,如RemoveAdd

回答

3

因爲BindingList<T>未聲明爲BindingList<out T> - 它不支持協方差

給這個一讀:

Covariance and Contravariance FAQ

+0

我前一陣子,現在讀到它,你提到它我記住。有什麼辦法可以解決這個問題嗎? – PedroC88

+0

您可以'.Cast ',或者以其他方式將其改爲預期的類型,但不會,沒有解決方法會影響'BindingList '本身。 – JerKimball

相關問題