dynamic model = new ExpandoObject();
model.Data = "asdf";
List<dynamic> listOfx = new List<dynamic>();
for (int i = 0; i < 3; i++) {
dynamic x = new ExpandoObject();
x.ID = i;
x.Name = "test" + i.ToString();
listOfx.Add(x);
}
model.listOfx = listOfx;当我运行此命令时,我可以看到模型中的数据,但看不到listOfx。
问题:如何在ExpandoObject中获取列表(或IEnumerable)
解决方案更新:

因为我在“本地变量”窗口中看不到lifOfx,所以我以为它不工作。在这里(通过y)你可以看到它。:-)
发布于 2011-10-20 06:42:15
我无法在Mono 2.10上重现类似的问题:
using System.Dynamic;
using System.Collections.Generic;
using System;
public class Program
{
public static void Main(string[] args)
{
dynamic x = new ExpandoObject();
x.Data ="test";
x.Arr = new [] { "test1","test2"};
x.Lst = new List<string> { "aap", "noot", "mies" };
Console.WriteLine(string.Join(", ", x.Arr));
Console.WriteLine(string.Join(", ", x.Lst));
}
}输出:
/tmp @ dmcs test.cs && mono test.exe
test1, test2
aap, noot, mies我很快就会在windows上重新测试。
更新已经测试了以下内容:
<代码>H113windows编译(csc.exe)二进制文件在装有Mono 2.10的windows上运行:OK<代码>H214<代码>H115windows-编译(csc.exe)二进制文件在装有MS.NET 4.0的Windows上运行: OK
在linux上,我只测试了mono本身编译的二进制文件,但我预计不会有任何问题。也许在List<>中存储动态有一些微妙的不同,我现在将测试这一点
发布于 2011-10-20 06:42:44
上面的代码可以很好地设置列表。例如,在您的代码后面添加以下代码将会很好地工作:
// Access value inside list
Console.WriteLine(model.listOfx[1].Name);
// Iterate through list
foreach (var o in model.listOfx)
{
Console.WriteLine(o.ID);
}例如,尝试以下示例(全功能示例):
using System;
using System.Collections.Generic;
using System.Dynamic;
using System.Linq;
public static class Test
{
public static void Main()
{
dynamic model = new ExpandoObject();
model.Data = "asdf";
List<dynamic> listOfx = new List<dynamic>();
for (int i = 0; i < 3; i++)
{
dynamic x = new ExpandoObject();
x.ID = i;
x.Name = "test" + i.ToString();
listOfx.Add(x);
}
model.listOfx = listOfx;
// Access value inside list
Console.WriteLine(model.listOfx[1].Name);
// Iterate through list
foreach (var o in model.listOfx)
{
Console.WriteLine(o.ID);
}
Console.ReadKey();
}
}这将使用您的示例代码。
发布于 2011-10-20 06:41:07
ExpandoObject支持IDictionary。您可以将其转换为
IDictionary myModel =(IDictionary)Model;所以你可以迭代它。
https://stackoverflow.com/questions/7828962
复制相似问题