我有以下代碼:爲什麼不能投射?
var commitmentItems = new List<CommitmentItem<ITransaction>>();
commitmentItems.Add(new CapitalCallCommitmentItem());
而且我得到以下錯誤:
Argument '1': cannot convert from 'Models.CapitalCallCommitmentItem' to
'Models.CommitmentItem<Models.ITransaction>'
然而,從CommitmentItem<CapitalCall>
CapitalCallCommitmentItem
繼承和CapitalCall
工具ITransaction
。那麼爲什麼錯誤?
這裏是一個更好的例子:
CapitalCall
實現ITransaction
var test = new List<ITransaction>();
test.Add(new CapitalCall());
var test2 = new List<List<ITransaction>>();
test.Add(new List<CapitalCall>()); // error.
通讀共同/反對常見問題。對於不熟悉這個主題的人來說,這是一個非常好的起點,因爲在你習慣之前,它有點像一個腦筋急轉彎。 http://blogs.msdn.com/b/csharpfaq/archive/2010/02/16/covariance-and-contravariance-faq.aspx – Lucero 2010-06-23 21:28:23