在过去的几天里,我一直在努力寻找一种方法来迭代 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/