static void Main(string[] args)
{
IEnumerable& strs = new List&();
IEnumerable&
//List& strs = new List&();
//List&
Action&
逆變部分,如果只能將Action&
這裡有一篇文章 http://www.cnblogs.com/Ninputer/archive/2008/11/22/generic_covariant.html
仔細看幾遍,會有收穫的。
1、因為IEnumeable&,當然本質上是因為IEnumerable&中的T只用於輸出(只出現在返回值),所以可以加out標記,而IList&中的T用於輸入和輸出(出現在參數和返回值),不能逆變協變。
2、協變和逆變的意義在於避免不必要的類型轉換,
簡化代碼和提高性能。
IEnumerable是只讀的,List是可以改的。如果List&可以變成List&
BTW,只有interface可以協變逆變,class是不行的。不過跟上面說的一樣,IList&也不行。
這個問題簡單想想就明白了吧,List&的T既可以用來輸入又可以用來輸出,當然不行。
倒不如想想為什麼IEnumerable&
不能變成IEnumerable&
※Node.js和.Net 4.5下的await、async相比有什麼不同?
※.net最適合做什麼?
※學了C#語言可以從事哪些工作?
※為什麼沒有新的支持底層達到類似C++這種程度,而易用性達到C#的語言出現?
※老師說linq語句過時了,是真的嗎?
TAG:NET | C# |