首页 > 编程语言 >C# 动态类添加属性

C# 动态类添加属性

时间:2023-11-21 17:24:23浏览次数:37  
标签:return Dictionary C# public binder 添加 result properties 属性

1.定义JsonDataObject 

public sealed class JsonDataObject : DynamicObject
{
    private readonly Dictionary<string, object> _properties;
    public JsonDataObject(Dictionary<string, object> properties)
    {
        _properties = properties;
    }
    public override IEnumerable<string> GetDynamicMemberNames()
    {
        return _properties.Keys;
    }
    public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        if (_properties.ContainsKey(binder.Name))
        {
            result = _properties[binder.Name];
            return true;
        }
        else
        {
            result = null;
            return false;
        }
    }
    public override bool TrySetMember(SetMemberBinder binder, object value)
    {
        if (_properties.ContainsKey(binder.Name))
        {
            _properties[binder.Name] = value;
            return true;
        }
        else
        {
            return false;
        }
    }
}

 2.调用

Dictionary<string, object> dic = new Dictionary<string, object>
{
    { "key1", "value1" },
    { "key2", "value2" },
    { "key3", "value3" },
    { "key4", "value4" }
};
dynamic result = new JsonDataObject(dic);

 result即为需要的结果。

标签:return,Dictionary,C#,public,binder,添加,result,properties,属性
From: https://www.cnblogs.com/yellow3gold/p/17847054.html

相关文章

  • AGC 020~039 记录
    不想写CF。AGC020D.MinMaxRepetition要令连续的相同字符个数的最大值最小,可以直接贪心将A和B尽可能分开,得出答案\(k=\lfloor\frac{A+B}{\min(A,B)+1}\rfloor\)。接下来要在这个基础上构造字典序最小的答案。我们显然希望A尽量靠前,直到超出限制时再用B分开,即靠前......
  • [Flink] Flink(CDC/SQL)Job在启动时,报“ConnectException: Error reading MySQL varia
    1问题描述1.1基本信息所属环境:CN-PT问题时间:2023-11-21所属程序:FlinkJob(XXXPT_dimDeviceLogEventRi)作业类型:FlinkSQLJob数据流:业务MySQL==>FlinkJob(FlinkCdcConnector(mysql)+FlinkSQL)==>BigdataKafka==>BigdataOLAP==>业务系统作业......
  • 2023最新!VMware17安装centos7保姆级教程
    2023最新!VMware17安装centos7保姆级教程安装的是cenos7,使用的是最新的VMware17导航目录2023最新!VMware17安装centos7保姆级教程导航一、虚拟机设置二、虚拟机初次启动配置一、虚拟机设置双击启动程序,在主窗口选择创建新虚拟机选择稍后安装操作系统,点击下一步选择Linux,版......
  • huggingface下载的.arrow数据集读取与使用说明
    huggingface下载的.arrow数据集读取与使用说明fromdatasetsimportload_from_diskfromdatasetsimportload_datasetdataset_cnn=load_dataset("ccdv/cnn_dailymail",'3.0.0',cache_dir=&qu......
  • 关于安装pytorch1.0.0版本(果然还是要手动自己去找啊。。。一遍成!!保真)
    首先第一步就是不要跑到官网里边去按照官网给的提示去下载!!不要不要不要!也不要去什么用清华镜像源啥的,因为根本找不到,很折腾!直接在这个网站download.pytorch.org/whl/cu100/torch_stable.html里边找你想要下载的torch1.0.0版本以及torchvision(如果要装cudatoolkit10.2版的torch,......
  • css 水平垂直居中的几种方法
    水平垂直居中的几种方式记录一下容器内只有单一元素时居中的几种方式<divstyle="width:300px;height:300px"class="wrap"><divstyle="width:100px;height:100px"class="box"></div></div>1.容器flex,调整内部轴线.wrap{di......
  • Wireshark抓包分析TCP三次握手
    TCP握手过程分析TCP三次握手示意图  第一次握手:客户端向服务器发送一个SYN段(表示发起连接请求),并且包含客户端的一个初始序列号seq=0第二次握手:服务端返回一个ACK(对客户端连接请求的应答)+SYN(表示服务端发起连接请求),并且包含服务端的一个初始序列号seq=0,同时返回一个确......
  • CreatePartition API执行流程_milvus源码解析(2)
    CreatePartitionAPI执行流程源码解析milvus版本:v2.3.2syncNewCreatedPartitionStep_milvus源码解析整体架构:CreatePartition的数据流向:1.客户端sdk发出CreatePartitionAPI请求。frompymilvusimport(connections,Collection,Partition,)print("star......
  • element-ui全局添加加载遮罩层
    创建loading.js文件import{Loading}from'element-ui';letloadingCount=0;letloading;conststartLoading=()=>{loading=Loading.service({lock:false,spinner:'el-icon-loading',background:'rgba(0,0,0,.5)......
  • 09-基础SQL-DQL(数据查询语言)-聚合函数(count、max、min、avg、sum)
    DQL-介绍(常用)DQL英文全称是DataQueryLanguage(数据查询语言),数据查询语言用来查询数据库中表的记录查询关键字:SELECTDQL-语法......