当前位置: 首页 > article >正文

.net处理dynamic类型运行之后的数据

在 .NET 中,`dynamic` 类型用于在运行时处理对象,它可以绕过编译时的类型检查,让你在运行时动态地访问对象的成员。当处理 `dynamic` 类型的 `List` 数据时,你可以按照以下步骤进行操作。

### 示例场景
假设你有一个 `dynamic` 类型的 `List`,你想要遍历这个列表并访问其中每个元素的属性。### 代码示例
```csharp

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        // 创建一个 dynamic 类型的 List
        dynamic dynamicList = new List<dynamic>();

        // 向列表中添加一些动态对象
        dynamicList.Add(new { Name = "Alice", Age = 25 });
        dynamicList.Add(new { Name = "Bob", Age = 30 });

        // 处理 dynamic 类型的 List 数据
        ProcessDynamicList(dynamicList);
    }

    static void ProcessDynamicList(dynamic list)
    {
        // 检查传入的对象是否为 IEnumerable 类型
        if (list is System.Collections.IEnumerable enumerable)
        {
            foreach (var item in enumerable)
            {
                try
                {
                    // 尝试访问每个元素的属性
                    string name = item.Name;
                    int age = item.Age;

                    // 输出元素的属性
                    Console.WriteLine($"Name: {name}, Age: {age}");
                }
                catch (RuntimeBinderException ex)
                {
                    // 处理属性访问异常
                    Console.WriteLine($"Error accessing properties: {ex.Message}");
                }
            }
        }
        else
        {
            Console.WriteLine("The provided object is not a valid list.");
        }
    }
}


```

### 代码解释
1. **创建 `dynamic` 类型的 `List`**:
    - 使用 `dynamic` 关键字声明一个 `List<dynamic>` 对象,并向其中添加一些动态对象。

2. **处理 `dynamic` 类型的 `List` 数据**:
    - 在 `ProcessDynamicList` 方法中,首先检查传入的对象是否为 `IEnumerable` 类型。
    - 如果是 `IEnumerable` 类型,则使用 `foreach` 循环遍历列表中的每个元素。
    - 在循环中,尝试访问每个元素的 `Name` 和 `Age` 属性,并输出这些属性的值。
    - 如果访问属性时发生异常(例如,元素没有 `Name` 或 `Age` 属性),则捕获 `RuntimeBinderException` 并输出错误信息。

### 注意事项
- **异常处理**:由于 `dynamic` 类型绕过了编译时的类型检查,访问属性时可能会发生运行时异常。因此,建议在访问属性时进行异常处理。
- **性能考虑**:使用 `dynamic` 类型会带来一定的性能开销,因为它需要在运行时进行类型检查和方法调用。如果可能的话,建议使用静态类型来提高性能。


http://www.kler.cn/a/541000.html

相关文章:

  • 【JVM详解二】常量池
  • 【信息系统项目管理师-案例真题】2017下半年案例分析答案和详解
  • Spring Boot Actuator(官网文档解读)
  • 没用的文章又➕1
  • 信息科技伦理与道德3-2:智能决策
  • Qt监控设备离线检测/实时监测设备上下线/显示不同的状态图标/海康大华宇视华为监控系统
  • 12.10 LLM 操作能力的边界突破(WebGPT vs SayCan)
  • 数据中心网络架构 — 云网一体化数据中心网络 — 算力网络 — SDN 架构
  • Redis7.0八种数据结构底层原理
  • 区块链100问之加密算法
  • 【机器学习】K-Nearest Neighbor KNN算法原理简介及要点
  • echarts 鼠标移入柱状图展示手指,移入label 展示箭头
  • 美创科技获评“浙江省重点专精特新中小企业”
  • win10 llamafactory模型微调相关②
  • STL函数算法笔记
  • 【扫描件PDF】如何批量识别扫描件PDF多个区域内容保存到Excel表格,基于WPF和腾讯OCR的详细解决方案
  • 【PGCCC】commit_delay 对性能的提升:PostgreSQL 基准测试
  • 25自动化考研复试面试常见核心问题真题汇总,自动化考研复试面试有哪些经典问题?自动化考研复试难不难啊?
  • 如何在 React 中使用 CSS Modules?
  • 给milvus添加账号密码
  • 【C++高并发服务器WebServer】-15:poll、epoll详解及实现
  • 【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
  • 如何通过腾讯 ima.copilot 训练自己的知识库
  • 一个简单的Windows TCP服务器实现
  • 【网络法医】Docker取证
  • STM32-知识