首页 > 其他分享 >.net动态类ExpandoObject及使用场景

.net动态类ExpandoObject及使用场景

时间:2024-11-13 16:20:45浏览次数:1  
标签:expando 场景 System 访问 ExpandoObject new net 动态

它位于 System.Dynamic 命名空间中。与普通的 C# 类型不同,ExpandoObject 允许在运行时动态地添加、删除或修改其成员(属性或方法)。这使得它在一些需要高度灵活性和动态性的数据结构场景中非常有用。
ExpandoObject 的基本特性
动态成员访问:可以在运行时添加或移除属性和方法。
弱类型化:不像强类型的 C# 类,ExpandoObject 不需要在编译时定义其成员,这意味着编译时不会检查成员的存在。
字典访问:ExpandoObject 实现了 IDictionary<string, object> 接口,可以像使用字典一样访问其成员。
动态数据处理:在处理结构不固定的数据时,ExpandoObject 非常有用。例如,处理 JSON 数据,或者从 API 获取的不确定结构的数据时,可以使用 ExpandoObject 来方便地访问和操作这些数据。

using System;
using System.Dynamic;

class Program
{
    static void Main()
    {
        dynamic expando = new ExpandoObject();
        expando.FirstName = "John";
        expando.LastName = "Doe";

        // 添加新的属性
        expando.Age = 25;

        // 动态方法
        expando.FullName = (Func<string>)(() => $"{expando.FirstName} {expando.LastName}");

        Console.WriteLine(expando.FullName());  // 输出: John Doe

        // 作为字典访问
        var dictionary = (IDictionary<string, object>)expando;
        foreach (var kvp in dictionary)
        {
            Console.WriteLine($"{kvp.Key}: {kvp.Value}");
        }
    }
}

示例2

dynamic r = new ExpandoObject();
foreach (var i in list)
{
    (r as ICollection<KeyValuePair<string, object>>).Add(new KeyValuePair<string, object>(i.SFA_ACTION_ID, i.ISSHOW == 0 ? false : true));
}

来源:https://blog.csdn.net/weixin_45497805/article/details/140142978

标签:expando,场景,System,访问,ExpandoObject,new,net,动态
From: https://www.cnblogs.com/xsj1989/p/18544235

相关文章

  • 汽车场景OCR解决方案:电子行驶证与驾驶证识别,引领智慧交通新纪元
    在数字化浪潮的推动下,交通管理行业迎来了革命性的变化。OCR技术的电子行驶证和电子驾驶证的引入,极大地提高了车辆和驾驶执照的管理效率,并为车主的出行带来了极大的便利。随着电子证件的普及,交通管理正逐步从传统的实体证件向数字化转型,这不仅为智能出行提供了便利,也催生了新的......
  • kubernetes镜像拉取失败解决方法 ErrImagePull
    被这个问题卡住了最少一个下午的时间。。。。不过就当熟悉k8s的命令了吧。。。只能这么安慰自己了最近在捣鼓k8s部署.netcore的后端(我是在windows上部署dockerdesktop来做测试的),在拉取我阿里云镜像仓库的私有镜像,搞来搞去搞了好久都没用dockpull registry.cn-hangzhou.aliyu......
  • 瓷砖的规格种类非常多,适用于不同场景和用途。常见的规格通常按尺寸、材质、功能和安装
    瓷砖的规格种类非常多,适用于不同场景和用途。常见的规格通常按尺寸、材质、功能和安装方式等进行分类。下面是一些常见瓷砖规格及其施工建议的对比表格,帮助选择适合的规格和施工人数。瓷砖规格与施工建议规格/尺寸(mm)适用场景常见材质适用类型施工人数建议优点缺点......
  • .NET 各版本贡献者列表
    在微信群里看到有同学对.NET9的贡献者数量有质疑,.NET这样的一个全场景的应用开发平台,他的生态是很庞大的,自然一起参与开源贡献的开发者也是很大的,但是很多人都不知道一直有这么一个地址是统计了.NET各个版本的开发者数量的,这篇文章就是给大家统计显示一下各个版本的.NET贡献者人......
  • 推荐一个.NetCore开源的CMS项目,功能强大、扩展性强、支持插件的系统!
    推荐一个基于.NetCore开发的开源CMS项目,该项目功能完善、涉及知识点比较多,不管是作为二次开发、还是学习都是不错的选择。01项目简介Cofoundry是基于.Net开发的、代码优先开发、具备可扩展且灵活的架构、简单易用的内容管理系统。02项目框架1、基于.Net8开发。2、数据......
  • 华为路由器/交换机配置Console口AAA认证以及Telnet登录
    一、Console口登录 Console口是路由器/交换机的本地管理接口,通常用于设备初始配置和管理。本文将介绍console登录的两种配置方式1、密码模式配置成这种模式后Console登录只需要输入密码。配置方法一[Huawei]user-interfaceconsole0 [Huawei-ui-console0]authentica......
  • 【轻量化】YOLOv8 更换骨干网络之 MobileNetv4 | 模块化加法!非 timm 包!
    之前咱们在这个文章中讲了timm包的加法,不少同学反馈要模块化的加法,那么这篇就讲解下模块化的加法,值得注意的是,这样改加载不了mobilebnetv4官方开源的权重了~论文地址:https://arxiv.org/pdf/2404.10518代码地址:https://github.com/tensorflow/models/blob/master/offic......
  • 微信小程序 - 解决报错{“errno“:600001,“errMsg“:“request:fail errcode:-202cronet_
    前言关于此问题网上的教程都无法解决,如果您的报错信息与我相似,即可解决。在微信小程序开发中,详细解决小程序请求接口报错:{“errno”:600001,“errMsg”:“request:failerrcode:-202cronet_error_code:-202error_msg:net::ERR_CERT_AUTHORITY_INVALID”},微信小程序发起网络请求......
  • 窗口辅助管理工具:Magnet MacOS电脑分屏软件 可自定义分割屏幕
    Magnet是一款功能强大的窗口辅助管理工具软件,专为Mac用户设计。它支持用户通过简单的拖放操作,将窗口快速捕捉到特定位置和大小,支持窗口分割和自定义布局。同时,Magnet提供了丰富的快捷键操作,提高了窗口管理的效率。此外,它还支持多显示器窗口管理和自定义布局模板,充分利用大屏幕优......
  • .NET Core 委托底层原理浅谈
    简介.NET通过委托来提供回调函数机制,与C/C++不同的是,委托确保回调是类型安全,且允许多播委托。并支持调用静态/实例方法。简单来说,C++的函数指针有如下功能限制,委托作为C#中的上位替代,能弥补函数指针的不足。类型不安全函数指针可以指向一个方法定义完全不同的函数。在编译期......