2011-10-19 16 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; 

これを実行すると、モデル内のDataは参照できますが、listOfxは表示されません。ExpandoObject内のリスト

問題:私は、私はそれがないと思った地元ウィンドウでlifOfxを見ることができなかったので enter image description here

:ソリューションのExpandoObject

UPDATE内のリスト(またはIEnumerableを)を取得する方法ワーキング。ここで(yを介して)あなたはそれが見えることができます。 :-)

答えて

3

私はモノラル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 

私はすぐに窓に再テストされます。

アップデートは、次のことをテストしています

  • のlinux-コンパイル(のDMC)モノラル2.10とWindows上のバイナリの実行:OK
  • のlinux-コンパイル(のDMC)MSとWindows上のバイナリの実行.NET 4.0:OK
  • 窓コンパイル(のDMC)モノラル2.10とWindows上のバイナリの実行:
  • 窓コンパイル(のDMC)OK MS.NET 4.0とWindows上のバイナリの実行:OK
  • 窓コンパイル(csc.exe)モノラル2.10とWindows上のバイナリの実行:OK
  • 窓コンパイル(csc.exe)MS.NET 4.0とWindows上のバイナリの実行:OK Linux上

私は単体でコンパイルされたバイナリだけをテストしましたが、問題は予期しません。おそらく、リスト<の中にダイナミックスを微妙に異なるものがあるかもしれませんが、今すぐテストします

+0

多くのありがとう@sehe - 実際には自分の過ちです...地元の窓で見ることができないために動作していないと思った。しかしそれは! –

+0

@DaveMateer私たちに知らせるために、Ok、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)'(2回)を意味すると思いますか? – sehe

+0

@sehe修正済み。ありがとう。 –