C# ExpandoObject中的列表 动态模型=新的ExpandooObject(); model.Data=“asdf”; List listOfx=新列表(); 对于(int i=0;i

C# ExpandoObject中的列表 动态模型=新的ExpandooObject(); model.Data=“asdf”; List listOfx=新列表(); 对于(int i=0;i,c#,expandoobject,C#,Expandoobject,当我运行这个程序时,我可以看到模型内部的数据,但不能看到listOfx 问题:如何在ExpandooObject中获取列表(或IEnumerable) 解决方案更新: 因为我在本地窗口看不到lifOfx,我认为它不起作用。在这里(通过y)可以看到它是::-) ExpandoObject支持IDictionary。你可以这样投 dynamic model = new ExpandoObject(); model.Data = "asdf"; List<dynamic&

当我运行这个程序时,我可以看到模型内部的数据,但不能看到listOfx

问题:如何在ExpandooObject中获取列表(或IEnumerable)

解决方案更新:


因为我在本地窗口看不到lifOfx,我认为它不起作用。在这里(通过y)可以看到它是::-)

ExpandoObject支持IDictionary。你可以这样投

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;

因此,您可以对其进行迭代。

我无法在Mono 2.10上重现类似的问题:

IDictionary myModel =(IDictionary)Model;
我很快会在windows上重新测试

更新已测试以下各项:

  • linux编译(dmcs)二进制文件在装有Mono 2.10的Windows上运行:OK
  • linux编译(dmcs)二进制文件运行在MS.NET 4.0的Windows上:OK
  • windows编译(dmcs)二进制文件在装有Mono 2.10的windows上运行:OK
  • windows已编译(dmcs)二进制文件在带有MS.NET 4.0的windows上运行:确定
  • windows编译(csc.exe)二进制文件在使用Mono 2.10的windows上运行:OK
  • windows编译(csc.exe)二进制文件在MS.NET 4.0的windows上运行:确定

在linux上,我只测试了mono本身编译的二进制文件,但我预计不会有任何问题。也许在列表中存储动态有一些微妙的不同,现在我将测试一下,上面的代码对于设置列表非常有效。例如,在代码之后添加此选项将很好:

/tmp @ dmcs test.cs && mono test.exe
test1, test2
aap, noot, mies
例如,请尝试以下(全功能示例):

使用系统;
使用System.Collections.Generic;
运用系统动力学;
使用System.Linq;
公共静态类测试
{
公共静态void Main()
{
动态模型=新的ExpandooObject();
model.Data=“asdf”;
List listOfx=新列表();
对于(int i=0;i<3;i++)
{
动态x=新的ExpandooObject();
x、 ID=i;
x、 Name=“test”+i.ToString();
添加(x);
}
model.listOfx=listOfx;
//列表中的访问值
Console.WriteLine(model.listOfx[1].Name);
//遍历列表
foreach(model.listOfx中的var o)
{
控制台写入线(o.ID);
}
Console.ReadKey();
}
}

这使用了您的精确示例代码。

我想您的意思是
foreach(model.listOfx中的var o)
(两次)?非常感谢@sehe-事实上这是我自己的错。。。因为无法在窗口中看到,所以认为它不起作用。但事实的确如此!
/tmp @ dmcs test.cs && mono test.exe
test1, test2
aap, noot, mies
// 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();
    }
}