在C#中,ExpandoObject 和 dynamic 都是用于动态构造对象的类型,但是它们之间有一些区别。下面是它们之间的主要区别:
在C#中,ExpandoObject 和 dynamic 都是用于动态构造对象的类型,但是它们之间有一些区别。下面是它们之间的主要区别:
1.类型
ExpandoObject 是一个类,实现了 IDictionary
2.访问属性
使用 ExpandoObject 添加和访问属性时,需要使用 IDictionary
3.类型安全
使用 ExpandoObject 添加和访问属性时,由于是通过字符串动态添加属性,所以没有类型安全检查。而使用 dynamic 访问属性时,在运行时会进行类型检查,并可能会引发运行时异常。
下面是一些示例,演示了 ExpandoObject 和 dynamic 的用法:
示例1:使用ExpandoObject
using System;
using System.Dynamic;
namespace ExpandoObjectDemo
{
class Program
{
static void Main(string[] args)
{
dynamic expObj = new ExpandoObject();
// 添加属性
expObj.Name = "John";
expObj.Age = 30;
expObj.Email = "john@test.com";
// 访问属性
Console.WriteLine(#34;Name: {expObj.Name}, Age: {expObj.Age}, Email: {expObj.Email}");
// 删除属性
((IDictionary)expObj).Remove("Email");
// 访问属性
Console.WriteLine(#34;Name: {expObj.Name}, Age: {expObj.Age}");
Console.ReadKey();
}
}
}
在这个例子中,我们使用 ExpandoObject 创建一个动态对象,并添加、访问、删除属性。
示例2:使用dynamic
using System;
namespace DynamicDemo
{
class Program
{
static void Main(string[] args)
{
dynamic dynamicObj = new System.Dynamic.ExpandoObject();
// 添加属性
dynamicObj.Name = "John";
dynamicObj.Age = 30;
dynamicObj.Email = "john@test.com";
// 访问属性
Console.WriteLine(#34;Name: {dynamicObj.Name}, Age: {dynamicObj.Age}, Email: {dynamicObj.Email}");
// 删除属性
// ((IDictionary)dynamicObj).Remove("Email");
// 访问不存在的属性时会导致运行时异常
// Console.WriteLine(#34;Name: {dynamicObj.Name}, Age: {dynamicObj.Age}, Email: {dynamicObj.Email1}");
Console.ReadKey();
}
}
}
在这个例子中,我们使用 dynamic 关键字创建一个动态对象,并添加、访问属性。与 ExpandoObject 不同的是,我们可以使用点号语法来访问属性。
总的来说,ExpandoObject 和 dynamic 都是用于动态构造对象的类型,但使用时需要根据场景进行选择。如果需要动态添加、删除属性,可以使用 ExpandoObject;如果只需要动态访问属性,可以使用 dynamic。无论哪种方式,都具有一定的灵活性,可以轻松地构造出各种类型的对象。
页面更新:2024-05-18
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号