- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
《上一篇》 介绍了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方法 。
dynamic person = Xmtool.DynamicObject();
person.Name = "softwaiter";
person.Age = 18;
Console.WriteLine(pernson["Name"]); // 打印Name属性值,输出softwaiter
name :准备赋值的属性名称.
value :属性赋值内容.
name :准备取值的属性名称.
result :获取到的属性值;为获取到将返回null.
name :属性名称.
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
name :准备设置值得属性名称.
value :属性值内容.
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
key :属性名称.
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
}
key :属性名称.
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
}
dynamic person = Xmtool.DynamicObject();
person.Name = "softwaiter";
person.Age = 18;
string json = person.ToString();
Console.WriteLine(json); // 输出{"Name":"softwaiter","Age":18}
defaultNS :默认命名空间.
dynamic person = Xmtool.DynamicObject();
person.Name = "softwaiter";
person.Age = 18;
string xml = person.ToXMLString();
Console.WriteLine(xml); //输出<xml><Name>softwaiter</Name><Age>18</Age></xml>
string xml2 = person.ToXMLString("http://www.xmltool.com");
Console.WriteLine(xml2); //输出<xml xmlns="http://www.xmltool.com"><Name>softwaiter</Name><Age>18</Age></xml>
最后此篇关于开源.NetCore通用工具库Xmtool使用连载-扩展动态对象篇的文章就讲到这里了,如果你想了解更多关于开源.NetCore通用工具库Xmtool使用连载-扩展动态对象篇的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
去年(2023年)年底我初学flutter,看了一些文档和教程,想找个东西*练练手。 小时候看过一个关于历史名人儿时事迹的短片,有一集是讲*总理的,有一个细节我记得很清楚:幼年***经常要做一个游戏
今天给大家分享一个我做的小工具,可以自定义扩展右键菜单的功能来提高工作效率,效果图如下: image 如上图,右键菜单多了几个我自定义的菜单
书接上回,今天继续和大家享一些关于枚举操作相关的常用扩展方法。 今天主要分享通过枚举值转换成枚举、枚举名称以及枚举描述相关实现。 我们首先修改一下上一篇定义用来测试的正常枚举,新增一个枚举项,
今天和大家享一些关于枚举操作相关的常用扩展方法。 我们平时用的比较多的是正常枚举,同时还有加[Flags]特性的位标志枚举,因此以下所有扩展方法同时适用正常枚举以及位标志枚举。 我们首先定义两
书接上回,我们继续来分享一些关于特殊时间获取的常用扩展方法。 01、获取当前日期所在月的第一个指定星期几 该方法和前面介绍的获取当前日期所在周的第一天(周一)核心思想是一样的,只是把求周一改成
书接上回,我们继续来分享一些关于特殊时间获取的常用扩展方法。 01、获取当天的开始时间 当天的开始时间指00:00:00时刻,因此只需要获取DateTime的Date属性只获取时间即可,具体代
书接上回,我们继续来分享一些关于时间转换的常用扩展方法。 01、时间转日期时间 TimeOnly 该方式是把TimeOnly类型转为DateTime类型,其中日期部分使用系统当前日期,时间部分
从事软件开发这么多年,平时也积累了一些方便自己快速开发的帮助类,一直在想着以什么方式分享出来,因此有了这个系列文章,后面我将以《开源-Ideal库》系列文章分享一些我认为比较成熟、比较方便、比较好的代
任何人都可以建议我应该使用什么程序/方法? 我需要有一个像谷歌地图这样的 map ,我可以在其中显示 map 、添加标记多边形等。 但是我不能依赖这样的在线服务,因为客户担心这样的服务会消失,我们的系
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 6年前关闭。 Improve this qu
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 11年前关闭。 Improve this qu
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be
您知道 EDA(电子设计自动化)领域有哪些开源项目正在寻找 C++ 程序员吗? 最佳答案 如果您经常关注 gEDA 的邮件列表,您也许能够加入 gEDA。详情:http://www.gpleda.or
如果现有Hadoop群集上有10个数据节点,则可以在4个或6个数据节点上安装NiFi吗? NiFi的主要目的是每天将数据从RDBMS加载到高容量的HDFS。 数据节点将配置为具有100 GB的高RAM
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
Closed. This question is off-topic。它当前不接受答案。
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 4 年前。
【Github源码】 《上一篇》 介绍了Xmtool工具库中的图形验证码类库,今天我们继续为大家介绍其中的扩展动态对象类库。 扩展动态对象是整个工具库中最重要的一个设计。
【Github源码】 《上一篇》 介绍了Xmtool工具库中的Web操作类库,今天我们继续为大家介绍其中的图形验证码类库。 图形验证码是为了抵御恶意攻击出现的一种设计;例如用
我是一名优秀的程序员,十分优秀!