聊聊 C# dynamic 类型,并分享一个将 dynamic 类型变量转为其它类型的技巧和实例

2024-06-22 12:12

本文主要是介绍聊聊 C# dynamic 类型,并分享一个将 dynamic 类型变量转为其它类型的技巧和实例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

image

前言

dynamic 是一种有别于传统变量类型的动态类型声明,刚开始接触可能在理解上会有些困难,可以简单地把它理解为一个盲盒,你可以任意猜测盒子有什么东西,并认为这些东西真正存在而进行处理,等到真正打开时,才能真正确定这些东西是不是真的存在。

所以,当使用 dynamic 声明一个变量时,编译器不会去检查该变量的成员或方法的有效性,换句话说,你可以调用任意成员或方法,即使它们不存在,编译器也不会报错,等到程序运行的时候,才会去解析,如果不存在,才会抛出错误。

dynamic 类型的这种特性,使得它在编程时非常灵活,很适合某些场景,比如与动态语言或COM互操作时,还有反射、JSON序列化/反序列化 等等。

下面分享一个将 dynamic 变量转为其它类型的技巧和实例。

Step By Step 步骤

  1. Linq 直接返回 List 变量

    private List<dynamic> BaseDataOfYZ(QueryParam param,string[] uos,string[] ugs,string uoEM,string ugEM,string wType)
    {var query = BaseDataQuery(param, uos).Select(x => new { x.wType, x.UO, x.UG }).GroupBy(x => x.wType).Select(x => new{wType = wType,UONum1 = x.Count(t => t.UO == uoEM),UONum2 = x.Count(t => t.UO == ugEM),WtNum = x.Count(t => ugs.Contains(t.UG))}).ToList<dynamic>();return query;
    }
    

    说明:

    这样的好处就是不需要去定义一个实体类,尤其是这个实体类只用在这一处的时候,这样就会很灵活和减少无用的代码。

  2. 在实际业务场景中再将 List 变量转为其它类型(留意注释

    // 技巧:先 ToList - 再 Select new class - 最后再 ToList
    private List<WCoverDto> SummaryData(List<dynamic> list)
    {var query2 = list.Select(x => new { x.wType, x.UONum1, x.UONum2, x.WtNum }).GroupBy(x => x.wType).Select(x => new{wType = x.Key,UONum1 = x.Sum(t => t.UONum1),UONum2 = x.Sum(t => t.UONum2),WtNum = x.Sum(t => t.WtNum),}).ToList().Select(x => new WCoverDto{wType = x.wType,UONum1 = x.UONum1,UONum2 = x.UONum2,Total = x.UONum1 + x.UONum2,WtNum = x.WtNum}).ToList();return query2;
    }
    

    说明:
    这是一个实际业务场景方法,对上一个方法产生的数据根据业务要求作进一步的处理,转成实际需要的对象类型

总结

dynamic 变量类型可以简化代码,处理动态数据时,可以方便地操作数据结构,但同时在使用中也要注意其缺陷,比如:

  1. 由于编译时无法进行类型检查,因此在运行时可能会出现类型转换错误或运行时异常。
  2. dynamic 类型在性能上可能会略逊于静态类型,因为它需要进行运行时绑定和解析。
  3. 过度使用 dynamic 可能会降低代码的可读性和维护性,因为编译器无法提供编译时的类型检查和智能感知。

总的来说,dynamic 类型在某些特定场景下能够提供方便和灵活性,但在使用时应慎重考虑其影响,避免在不必要的情况下使用 dynamic,只在确实需要动态类型绑定的情况下使用,最好地发挥 dynamic 类型的作用。

我是老杨,一个奋斗在一线的资深研发老鸟,让我们一起聊聊技术,聊聊人生。

都看到这了,求个点赞、关注、在看三连呗,感谢支持。

这篇关于聊聊 C# dynamic 类型,并分享一个将 dynamic 类型变量转为其它类型的技巧和实例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1084256

相关文章

C#使用Spire.XLS快速生成多表格Excel文件

《C#使用Spire.XLS快速生成多表格Excel文件》在日常开发中,我们经常需要将业务数据导出为结构清晰的Excel文件,本文将手把手教你使用Spire.XLS这个强大的.NET组件,只需几行C#... 目录一、Spire.XLS核心优势清单1.1 性能碾压:从3秒到0.5秒的质变1.2 批量操作的优雅

C#和Unity中的中介者模式使用方式

《C#和Unity中的中介者模式使用方式》中介者模式通过中介者封装对象交互,降低耦合度,集中控制逻辑,适用于复杂系统组件交互场景,C#中可用事件、委托或MediatR实现,提升可维护性与灵活性... 目录C#中的中介者模式详解一、中介者模式的基本概念1. 定义2. 组成要素3. 模式结构二、中介者模式的特点

C#中SortedSet的具体使用

《C#中SortedSet的具体使用》SortedSet是.NETFramework4.0引入的一个泛型集合类,它实现了一个自动排序的集合,内部使用红黑树数据结构来维护元素的有序性,下面就来介绍一下如... 目录基础概念主要特性创建和初始化基本创建方式自定义比较器基本操作添加和删除元素查询操作范围查询集合运

C# Opacity 不透明度的具体使用

《C#Opacity不透明度的具体使用》本文主要介绍了C#Opacity不透明度的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录WinFormsOpacity以下是一些使用Opacity属性的示例:设置窗体的透明度:设置按钮的透

C#控制台程序同步调用WebApi实现方式

《C#控制台程序同步调用WebApi实现方式》控制台程序作为Job时,需同步调用WebApi以确保获取返回结果后执行后续操作,否则会引发TaskCanceledException异常,同步处理可避免异... 目录同步调用WebApi方法Cls001类里面的写法总结控制台程序一般当作Job使用,有时候需要控制

在ASP.NET项目中如何使用C#生成二维码

《在ASP.NET项目中如何使用C#生成二维码》二维码(QRCode)已广泛应用于网址分享,支付链接等场景,本文将以ASP.NET为示例,演示如何实现输入文本/URL,生成二维码,在线显示与下载的完整... 目录创建前端页面(Index.cshtml)后端二维码生成逻辑(Index.cshtml.cs)总结

MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)

《MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)》本文给大家介绍MyBatis的xml中字符串类型判空与非字符串类型判空处理方式,本文给大家介绍的非常详细,对大家的学习或... 目录完整 Hutool 写法版本对比优化为什么status变成Long?为什么 price 没事?怎

C#异步编程ConfigureAwait的使用小结

《C#异步编程ConfigureAwait的使用小结》本文介绍了异步编程在GUI和服务器端应用的优势,详细的介绍了async和await的关键作用,通过实例解析了在UI线程正确使用await.Conf... 异步编程是并发的一种形式,它有两大好处:对于面向终端用户的GUI程序,提高了响应能力对于服务器端应

Java Stream流以及常用方法操作实例

《JavaStream流以及常用方法操作实例》Stream是对Java中集合的一种增强方式,使用它可以将集合的处理过程变得更加简洁、高效和易读,:本文主要介绍JavaStream流以及常用方法... 目录一、Stream流是什么?二、stream的操作2.1、stream流创建2.2、stream的使用2.

C#中的Drawing 类案例详解

《C#中的Drawing类案例详解》文章解析WPF与WinForms的Drawing类差异,涵盖命名空间、继承链、常用类及应用场景,通过案例展示如何创建带阴影圆角矩形按钮,强调WPF的轻量、可动画特... 目录一、Drawing 是什么?二、典型用法三、案例:画一个“带阴影的圆角矩形按钮”四、WinForm