首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ExpandoObject中的列表

ExpandoObject中的列表
EN

Stack Overflow用户
提问于 2011-10-20 06:25:27
回答 3查看 12.8K关注 0票数 5
代码语言:javascript
复制
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)你可以看到它。:-)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-20 06:42:15

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

代码语言:javascript
复制
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));
    }
}

输出:

代码语言:javascript
复制
/tmp @ dmcs test.cs && mono test.exe
test1, test2
aap, noot, mies

我很快就会在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上运行:OK

<代码>H113windows编译(csc.exe)二进制文件在装有Mono 2.10的windows上运行:OK<代码>H214<代码>H115windows-编译(csc.exe)二进制文件在装有MS.NET 4.0的Windows上运行: OK

在linux上,我只测试了mono本身编译的二进制文件,但我预计不会有任何问题。也许在List<>中存储动态有一些微妙的不同,我现在将测试这一点

票数 4
EN

Stack Overflow用户

发布于 2011-10-20 06:42:44

上面的代码可以很好地设置列表。例如,在您的代码后面添加以下代码将会很好地工作:

代码语言:javascript
复制
// Access value inside list
Console.WriteLine(model.listOfx[1].Name);

// Iterate through list
foreach (var o in model.listOfx)
{
    Console.WriteLine(o.ID);
}

例如,尝试以下示例(全功能示例):

代码语言:javascript
复制
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();
    }
}

这将使用您的示例代码。

票数 4
EN

Stack Overflow用户

发布于 2011-10-20 06:41:07

ExpandoObject支持IDictionary。您可以将其转换为

代码语言:javascript
复制
IDictionary myModel =(IDictionary)Model;

所以你可以迭代它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7828962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档