首页 > 编程语言 >《c#高级编程》第4章C#4.0中的更改(九)——协变和逆变

《c#高级编程》第4章C#4.0中的更改(九)——协变和逆变

时间:2023-04-25 14:23:52浏览次数:37  
标签:4.0 c# dynamic 元组 C# 添加 动态 字典

动态字典(Dynamic Dictionary)是指一个键值对集合,其中键和值的类型都可以在运行时确定并且可以动态变化。在C#中,可以使用 dynamic 关键字来实现这一功能。

例如,下面的代码演示了如何创建一个动态字典并向其中添加元素:

dynamic dict = new System.Dynamic.ExpandoObject();
dict.Name = "张三";
dict.Age = 25;

在上述代码中,我们通过 dynamic 关键字声明了一个动态字典,并向其中添加了两个元素(Name 和 Age)。由于 dynamic 类型是在运行时才确定的,因此可以在任何时候向该字典中添加或删除元素。

动态字典的经典应用场景包括在需要动态构建数据结构或操作未知类型数据的场景中,特别是在处理API响应或其他外部数据源时,往往需要灵活地处理各种不同的数据类型。

元组(Tuple)是指一组有序、不可变的值,可以用作返回值的容器或方法参数的容器。在C#中,可以使用 Tuple 泛型类来实现元组。

例如,下面的代码演示了如何创建一个元组并向其中添加元素:

var tuple = Tuple.Create("张三", 25);

在上述代码中,我们使用 Tuple.Create 方法创建了一个包含两个元素的元组,并将其赋值给变量 tuple。由于元组是不可变的,因此无法通过索引或其他方式来修改其中的元素。

元组的经典应用场景包括在需要返回多个值时,特别是当这些值之间没有明显关系或无法封装为一个对象时。另外,元组也可以用作方法参数,将多个参数打包成一个参数传递,从而简化方法调用。

动态对象(Dynamic Object)是指一个对象,在运行时可以动态地添加、删除、修改其属性和方法。在C#中,可以使用 dynamic 关键字来实现这一功能。

例如,下面的代码演示了如何创建一个动态对象并向其中添加元素:

dynamic obj = new System.Dynamic.ExpandoObject();
obj.Name = "张三";
obj.SayHello = new Action(() => Console.WriteLine("Hello, World!"));

在上述代码中,我们使用 dynamic 关键字声明了一个动态对象,并向其中添加了两个属性(Name 和 SayHello)。由于 dynamic 类型是在运行时才确定的,因此可以在任何时候向该对象中添加或删除属性。

动态对象的经典应用场景包括在需要动态构建对象或操作未知类型数据的场景中,特别是在处理API响应或其他外部数据源时,往往需要灵活地处理各种不同的数据类型。

标签:4.0,c#,dynamic,元组,C#,添加,动态,字典
From: https://www.cnblogs.com/DinAction/p/17352458.html

相关文章

  • mac os下安装k8s的kubernetes-dashboard
     需要这个的继续往下看 环境macos 12.6.2 安装dokcer https://docs.docker.com/desktop/install/mac-install/安装k8s https://blog.csdn.net/qq_20042935/article/details/124472626 <-看这位兄弟写的很详细了安装kubernetes-dashboard 1.创建命名空间 kubec......
  • 实例解释BCELoss与BCEWithLogitsLoss的关联(二分类问题)
      BCEWithLogitsLoss=Sigmoid+BCELoss,      nn接口                       Function接口nn.BCELoss()                 F.binary_cross_entropy()nn.BCEWithLogitsLos......
  • EAS_字啊listUICTEX中获取选中的id
    @OverridepublicvoidactionInTransfer_actionPerformed(ActionEvente)/**/throwsException/**/{ArrayListidList=getSelectedIdValues();SelectorItemCollectionsic=newSelectorItemCollection();......
  • [LeetCode] 1342. Number of Steps to Reduce a Number to Zero 将数字变成 0 的操作
    Givenaninteger num,return thenumberofstepstoreduceittozero.Inonestep,ifthecurrentnumberiseven,youhavetodivideitby 2,otherwise,youhavetosubtract 1 fromit.Example1:Input:num=14Output:6Explanation: Step1)14ise......
  • MFC-BringWindowToTop将指定窗口设置到Z序的顶部
     HWNDhWnd=::FindWindow(_T("Notepad"),NULL);BOOLb=::BringWindowToTop(hWnd);//将指定窗口设置到Z序的顶部/*如果窗口为顶层窗口,则该窗口被激活;如果窗口为子窗口,则相应的顶级父窗口被激活参数:HWNDhWnd设置到Z序顶部的窗口句柄返回值:......
  • ContextPath must start with '' and not end with ''
    1、问题运行SpringBoot项目,发生java.lang.IllegalArgumentException异常,原因如下:ContextPathmuststartwith'/'andnotendwith'/'完整的Run输出如下:._________/\\/___'_____(_)______\\\\(()\___......
  • vue3中如何引入element-icon并使用
    简单来说,步骤就是:安装——注册——按需引入——使用安装#NPM$npminstall@element-plus/icons-vue#Yarn$yarnadd@element-plus/icons-vue#pnpm$pnpminstall@element-plus/icons-vue注册您需要从@element-plus/icons-vue中导入所有图标并进行全局注册。......
  • MEMORY REPLAY WITH DATA COMPRESSION FOR CONTINUAL LEARNING--阅读笔记
    MEMORYREPLAYWITHDATACOMPRESSIONFORCONTINUALLEARNING--阅读笔记摘要:在这项工作中,我们提出了使用数据压缩(MRDC)的内存重放,以降低旧的训练样本的存储成本,从而增加它们可以存储在内存缓冲区中的数量。观察到压缩数据的质量和数量之间的权衡对于内存重放的有效性是非常重要......
  • 搜狗细胞词库处理代码(可用于scel转txt)
    今天先贴个简单代码,稍后再详细叙述…… 基于QT实现,主要是考虑Unicode字符处理的方便,可以稍加处理用于C或C++语言。 //取连续两字节,转换为short类型的值,字节顺序是低字节-高字节inlineunsignedshortGetUShort(QByteArray&fData,intstartPos){unsignedcharlow=fData......
  • 《c#高级编程》第4章C#4.0中的更改(八)——协变和逆变
    一、协变C#协变是指在一些特定的情况下,可以将一个派生类型的实例赋值给其基类或接口类型的引用。这里的“派生类型”指的是从某个基类或接口继承并增加了新的成员的类型。C#4.0引入了对协变和逆变的支持。其中,协变针对的是返回类型,逆变则针对参数类型。通过使用协变和逆变,可以......