2011-07-06 8 views
1

リストにループすると、リスト内のすべてのアイテムに常に同じ値が表示されます。リスト<dynamic>()。問題を追加するC#

どこが間違っていますか?

ここは私がしたものです。

var DyObjectsList = new List<dynamic>; 
dynamic DyObj = new ExpandoObject(); 
if (condition1) 
{ DyObj.Required = true; 
    DyObj.Message = "Message 1"; 
    DyObjectsList.Add(DyObj); } 
if (condition2) 
{ DyObj.Required = false; 
    DyObj.Message = "Message 2"; 
    DyObjectsList.Add(DyObj); 
} 

......

は興味深いことにDyObjectsList内のすべての項目は、最後に割り当てられたオブジェクトの値に置き換えられます。あなたは(そうでなければ、繰り返し同じインスタンスへの参照を追加/変更している) if文の本体内に新しいインスタンスをインスタンス化する必要が

+3

同じオブジェクトへの複数の参照の追加。 – asawyer

+2

...同じオブジェクトのプロパティを割り当てると、別のインスタンスが存在すると思われます。 –

+0

ここで提供されているコードのみを手助けすることはできません。このコードだけを考慮すると、1つのオブジェクトの参照がリストに追加されています。このコードの文脈を教えてください。それはループですか?それは機能の一部ですか? –

答えて

9

:もちろん

if (condition1) { 
    dynamic DyObj = new ExpandoObject(); 
    DyObj.Required = true; 
    DyObj.Message = "Message 1"; 
    DyObjectsList.Add(DyObj); } 
if (condition2) { 
    dynamic DyObj = new ExpandoObject(); 
    DyObj.Required = false; 
    DyObj.Message = "Message 2"; 
    DyObjectsList.Add(DyObj); 
} 

を、さらに良いです:

if(condition1) { 
    dynamic obj = GetNewDynamicObject(false, "Message 1"); 
    DyObjectsList.Add(obj); 
} 
if(condition2) { 
    dynamic obj = GetNewDynamicObject(true, "Message 2"); 
    DyObjectsList.Add(obj); 
} 

ここで、GetNewDynamicObjectの定義は明らかです。

+0

私はダイナミクスを演奏して以来、しばらくしていますが、動的オブジェクトではないはずです。obj = GetNewDynamicObject(false、 "Message 1"); – asawyer

4

同じオブジェクトを2回追加し、そのプロパティを途中で変更しています。

毎回new ExpandoObject()を追加する必要があります。

0

両方の条件が真である場合、変数は最後のifブロックと同じように設定されます。 ifブロックの代わりにelseを使うべきでしょう。

関連する問題