2011-10-19 28 views
5
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的)解决方案上的ExpandoObject

UPDATE内: enter image description here

因为我看不到lifOfx在当地人的窗口,我认为这是不加工。在这里(通过y)你可以看到它。 :-)

回答

3

我不能在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不久将重新测试。

更新进行了测试以下:

  • 在linux编译(公契)二进制运行在Windows上使用Mono 2.10:OK
  • 在linux编译(公契)与MS Windows上二进制运行.NET 4.0:OK
  • 窗口编译(公契)带单声道2.10在Windows上运行的二进制:OK
  • 窗口编译(公契)与MS.NET 4.0在Windows上运行的二进制:OK
  • 窗户编译器(csc.exe)和Mono 2.10在Windows上运行的二进制:OK
  • 窗户编译器(csc.exe)与MS.NET 4.0在Windows上运行的二进制:OK

在Linux我只测试了单声道本身编译的二进制文件,但我没有预料到任何问题。或许在列表<>中存储动态有细微差别,我现在将测试

+0

非常感谢@sehe - 事实上这是我自己的错......认为它不能正常工作,因为无法在当地人窗口看到。但它是! –

+0

@DaveMateer好的,thx让我们知道 – sehe

0

ExpandoObject支持IDictionary。你可以投它如

IDictionary myModel =(IDictionary)Model; 

那么你可以迭代它。

4

上面的代码对于设置列表非常适用。例如,你的代码之后添加此将正常工作:

// 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(); 
    } 
} 

这将使用您的具体示例代码。

+0

我想你的意思是'foreach(var o in model.listOfx)'(两次)? – sehe

+0

@sehe固定。谢谢。 –