日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#中协变和逆变的基本概念、List和List.Select方法的命名空间

發(fā)布時間:2025/4/14 C# 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#中协变和逆变的基本概念、List和List.Select方法的命名空间 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在 C# 中,協(xié)變和逆變能夠實現(xiàn)數(shù)組類型、委托類型和泛型類型參數(shù)的隱式引用轉換。 協(xié)變保留分配兼容性,逆變則與之相反。

msdn 解釋如下:
“協(xié)變”是指能夠使用與原始指定的派生類型相比,派生程度更大的類型。
“逆變”則是指能夠使用派生程度更小的類型。

“協(xié)變”->”和諧的變”->”很自然的變化”->string->object :協(xié)變。
“逆變”->”逆常的變”->”不正常的變化”->object->string 逆變。

using System; using System.Collections; using System.Collections.Generic; using System.Linq;public abstract class Animal { }public class Dog : Animal { }namespace xbdemo {class Program{public static void Main(string[] args){Dog gougou1 = new Dog();Animal anm1 = gougou1;List<Dog> lstdogs = new List<Dog>();//List<Animal> lstanm = lstdogs;//List<Animal> lstanm2 = lstdogs.Select(d => (Animal)d).ToList();Console.Write("Press any key to continue . . . ");Console.ReadKey(true);}} }

代碼中有2句注釋的,先把第二句注釋掉,保留第一句,構建;

因為Dog繼承自Animal,所以Animal anm1 = gougou1;?gougou1 會隱式的轉變?yōu)锳nimal;

但是List<Dog> 不繼承List<Animal> 所以出現(xiàn)錯誤提示 CS0029,無法將類型...隱式轉換為...;

List要轉換過去要使用Select方法;

List<Animal> lstanm2 = lstdogs.Select(d => (Animal)d).ToList();

? ? 去掉這一句的注釋,注釋掉前面一句,構建;

? ? List不包含Select的定義.....;List的命名空間是using System.Collections.Generic,已經(jīng)添加,為什么找不到它包含的方法?Select方法還必須包含System.Linq;

? ? 如果不包含using System.Collections.Generic,則出現(xiàn)CS0246;

包含了System.Collections.Generic和System.Linq,再構建;

這就不會出錯;?協(xié)變和逆變參見

https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/concepts/covariance-contravariance/

《新程序員》:云原生和全面數(shù)字化實踐50位技術專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的C#中协变和逆变的基本概念、List和List.Select方法的命名空间的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。