c# - 是否可以迭代 List<dynamic>?

标签 c# dynamic

在过去的几天里,我一直在努力寻找一种方法来迭代 List<dynamic>没有太大的成功。

这就是我正在做的:

while (dr.Read())
{
    dynamic e = new ExpandoObject();
    var d = e as IDictionary<string, object>;
    for (var i = 0; i < dr.FieldCount; i++)
        d.Add(dr.GetName(i), DBNull.Value.Equals(dr[i]) ? null : dr[i]);

    result.Add(e);
}

上面的代码是一个返回 IEnumerable<dynamic> 的方法然后在我的 Controller 中,我通过以下方式获取数据:

dynamic irionErrorsExport = oracleDbManager.GetStrCtrlNDGWithErrors(tableName, queryParamsList, periodo, "", "", "");

现在我卡住了,因为我需要迭代 irionErrorsExport 并创建一个“具体”对象以与 EPPlus 一起使用。

任何人都可以告诉我这是否可能并展示一个简单的例子吗?

最佳答案

是的,您可以遍历 dynamic 对象:

dynamic source = new List<int>() {1, 2, 3, 4, 5, 6};
foreach (var item in source)
{
    Console.Write(item.ToString());
}

123456 打印到控制台。

但是,如果无法迭代,则会导致运行时异常:

考虑以下代码:

dynamic source = 2;
foreach (var item in source)
{
    Console.Write(item.ToString());
}

RuntimeBinderException 被抛出:

Cannot implicitly convert type 'int' to 'System.Collections.IEnumerable'

编辑:您应该了解foreach普通 变量和动态变量的区别。它们在另一个 SO 问题中有解释:C# 4.0 'dynamic' and foreach statement

关于c# - 是否可以迭代 List<dynamic>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18174404/

相关文章:

c# - 将字符串空值转换为 int

c# - 抽象可重用库中的合成根

c# - "No suitable directory found to load unmanaged modules"在 EMGU 中是什么意思?

c# - 使用 .net MVC RadioButtonFor() 时,如何分组以便只能进行一个选择?

C# 如何从 URL 获取服务器错误?

c# - 如何将 Sum() 等 linq 函数与动态变量一起使用

php - 根据操作系统在 php 中动态定义 ffmpeg 二进制文件路径

javascript - React - 从属于同一个 render() 的另一个组件触发组件方法

c# - 为什么编译器将 Func<dynamic, int> 的返回类型视为强类型?

c++ - 有限的分配大小 C++