C# 中 ExpandoObject 和 dynamic 浅析

在C#中,ExpandoObject 和 dynamic 都是用于动态构造对象的类型,但是它们之间有一些区别。下面是它们之间的主要区别:

在C#中,ExpandoObject 和 dynamic 都是用于动态构造对象的类型,但是它们之间有一些区别。下面是它们之间的主要区别:

1.类型

ExpandoObject 是一个类,实现了 IDictionary 接口,可以动态添加、删除和修改属性。而 dynamic 是一个关键字,用于声明动态类型变量。

2.访问属性

使用 ExpandoObject 添加和访问属性时,需要使用 IDictionary 接口中定义的方法,例如 Add 和 Remove。而使用 dynamic 添加和访问属性时,可以像访问普通对象属性一样使用点号或方括号语法。

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

标签:方括号   时会   示例   语法   属性   例子   区别   对象   类型   动态

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top