码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 开源.NetCore通用工具库Xmtool使用连载 - 扩展动态对象篇


    合集 - Xmtool工具类库(11)
    1.开源.NetCore通用工具库Xmtool使用连载 - 日期时间篇2022-08-182.开源.NetCore通用工具库Xmtool使用连载 - 正则表达式篇2022-09-073.开源.NetCore通用工具库Xmtool使用连载 - 加密解密篇04-094.开源.NetCore通用工具库Xmtool使用连载 - 散列算法篇05-095.开源.NetCore通用工具库Xmtool使用连载 - 随机值篇05-126.开源.NetCore通用工具库Xmtool使用连载 - 发送邮件篇05-227.开源.NetCore通用工具库Xmtool使用连载 - 发送短信篇05-318.开源.NetCore通用工具库Xmtool使用连载 - XML操作篇08-059.开源.NetCore通用工具库Xmtool使用连载 - HTTP请求篇08-1210.开源.NetCore通用工具库Xmtool使用连载 - 图形验证码篇09-08
    11.开源.NetCore通用工具库Xmtool使用连载 - 扩展动态对象篇09-27
    收起

    【Github源码】


    《上一篇》 介绍了Xmtool工具库中的图形验证码类库,今天我们继续为大家介绍其中的扩展动态对象类库。


    扩展动态对象是整个工具库中最重要的一个设计。在软件开发过程中,我们经常需要定义各种各样的数据对象;例如:用于参数传递的数据实体类、用于接口返回结果的Json对象等等。

    // 人员数据实体定义
    public class Person
    {
        public string Name { get; set; } = null;
        public int Age { get; set; } = 0;
    }
    

    当我们遇到的场景越多、越复杂,我们需要定义和维护的这种类也会更多;这无疑是一种负担,且这个过程相当枯燥和乏味。在编译型编程语言Javascript中,变量是没有强制指定类型的,用户使用时可以随意赋值;这让开发人员在使用过程中会非常灵活且方便;参考这种特性,并基于系统DynamicMetaObject对象,我们封装了DynamicObjectExt对象,我们称之为扩展动态对象,它实现了无需定义直接赋值的形式使用数据对象,像Javascript中一样简单和灵活,帮我们简化了大量的定义过程。

    // 直接创建对象,并根据实际数据对象结构进行赋值即可
    dynamic person = Xmtool.DynamicObject();
    person.Name = "softwaiter";
    person.Age = 18;
    // TODO
    

    除了这种基本能力之外,扩展对象中还提供了丰富的方法,用于对动态对象进行更多的判断和控制,使之能够满足各种各样的应用场景。

    this属性

    TrySetValue方法

    TryGetValue方法

    GetValue方法

    GetValueByPath方法

    SetValue方法

    SetValueByPath方法

    Has方法

    HasPath方法

    Remove方法

    RemovePath方法

    ToString方法

    ToXMLString方法

    1. this属性

    说明:根据指定属性名称获取属性值。
    dynamic person = Xmtool.DynamicObject();
    person.Name = "softwaiter";
    person.Age = 18;
    Console.WriteLine(pernson["Name"]);	// 打印Name属性值,输出softwaiter
    

    2. TrySetValue方法

    public bool TrySetValue(string name, object value)
    说明:尝试为指定name的属性赋值,赋值成功返回true;否则返回false。
    参数:

    name:准备赋值的属性名称。

    value:属性赋值内容。

    3. TryGetValue方法

    public bool TryGetValue(string name, out object result)
    说明:尝试从指定name的属性获取值,获取成功返回true;否则返回false。
    参数:

    name:准备取值的属性名称。

    result:获取到的属性值;为获取到将返回null。

    4. GetValue方法

    public object GetValue(string name)
    说明:返回指定name的属性值;不存在找到则返回null。
    参数:

    name:属性名称。

    5. GetValueByPath方法

    public object GetValueByPath(string path)
    说明:GetValue方法的扩展,GetValueByPath能获取多层级属性的值。
    参数:

    path:多层级属性路径,中间用“.”连接。

    dynamic person = Xmtool.DynamicObject();
    person.Name = "softwaiter";
    person.Age = 18;
    person.Pet = Xmtool.DynamicObject();
    person.Pet.Name = "Tom";
    person.Pet.Kind = "Cat";
    Console.WriteLine(pernson.GetValueByPath("Pet.Name"));	// 打印宠物名称,输出Tom
    

    6. SetValue方法

    public object SetValue(string name, object value)
    说明:为指定name的属性设置值。
    参数:

    name:准备设置值得属性名称。

    value:属性值内容。

    7. SetValueByPath方法

    public bool SetValueByPath(string path, object value)
    说明:SetValue方法的扩展,SetValueByPath能设置多层级属性的值。
    参数:

    path:多层级属性路径,中间用“.”连接。

    value:属性值内容。

    dynamic person = Xmtool.DynamicObject();
    person.Name = "softwaiter";
    person.Age = 18;
    person.Pet = Xmtool.DynamicObject();
    person.Pet.Name = "Tom";
    person.Pet.Kind = "Cat";
    person.SetValueByPath("Pet.Name", "Chika");
    Console.WriteLine(pernson.GetValueByPath("Pet.Name"));	// 打印宠物名称,输出Chika
    

    8. Has方法

    public bool Has(string key)
    说明:判断是否包含指定属性。
    参数:

    key:属性名称。

    9. HasPath方法

    public bool HasPath(string path)
    说明:Has方法的扩展,HasPath能判断多层级属性是否存在。
    参数:

    path:多层级属性路径,中间用“.”连接。

    dynamic person = Xmtool.DynamicObject();
    person.Name = "softwaiter";
    person.Age = 18;
    person.Pet = Xmtool.DynamicObject();
    person.Pet.Name = "Tom";
    person.Pet.Kind = "Cat";
    if (person.HasPath("Pet.Name"))
    {
        // TODO
    }
    

    10. Remove方法

    public bool Remove(string key)
    说明:从对象上删除指定的属性。
    参数:

    key:属性名称。

    11. RemovePath方法

    public bool RemovePath(string path)
    说明:Remove方法的扩展,RemovePath能删除多层级属性。
    参数:

    path:多层级属性路径,中间用“.”连接。

    dynamic person = Xmtool.DynamicObject();
    person.Name = "softwaiter";
    person.Age = 18;
    person.Pet = Xmtool.DynamicObject();
    person.Pet.Name = "Tom";
    person.Pet.Kind = "Cat";
    person.RemovePath("Pet.Kind");
    if (person.HasPath("Pet.Kind")) // 将返回false
    {
    	// TODO   
    }
    

    12. ToString方法

    public override string ToString()
    说明:将对象序列化为JSON字符串并返回;常用于API接口结果返回。
    dynamic person = Xmtool.DynamicObject();
    person.Name = "softwaiter";
    person.Age = 18;
    string json = person.ToString();
    Console.WriteLine(json);	// 输出{"Name":"softwaiter","Age":18}
    

    13. ToXMLString方法

    public string ToXMLString(string defaultNS = "")
    说明:将对象序列化为XML字符串并返回。
    参数:

    defaultNS:默认命名空间。

    dynamic person = Xmtool.DynamicObject();
    person.Name = "softwaiter";
    person.Age = 18;
    string xml = person.ToXMLString();
    Console.WriteLine(xml);	//输出softwaiter18
    string xml2 = person.ToXMLString("http://www.xmltool.com");
    Console.WriteLine(xml2); //输出softwaiter18
    


    【Github源码】

  • 相关阅读:
    Java版本企业工程行业管理系统源码
    最高薪15k!“转行软件测试后,我想要的生活,就应该是这样!”
    如何实现「零信任网络」安全体系结构?教你五步实现无边界安全
    计算机毕业设计Java春之梦理发店管理源码+系统+数据库+lw文档
    jzoj1382 区间
    【Git】常用命令大全
    c/c++字符串处理标准库 string 介绍
    计算机丢失MSVCP140.dll的解决方法分享
    从零开始的Hadoop学习(五)| HDFS概述、shell操作、API操作
    WhatsApp+SaleSmartly自动化,还有这些惊喜是你不知道的!
  • 原文地址:https://www.cnblogs.com/bcbr/p/17731652.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号