2012-04-17 9 views
0

配列サブスクリプション演算子を持つListのすべてのオブジェクトを繰り返し処理し、そのフィールドを変更して別のリストに格納しようとしています。ここで私が書いたコードは次のとおりです。は、厳密な型の総称リストにあるオブジェクトを変更できません

private List<JavaScriptEventM> getSubset(List<JavaScriptEventM> domEvents) 
    { 
     List<JavaScriptEventM> retVal = new List<JavaScriptEventM>(); 

     for (int i = 0; i < domEvents.Count; i++) 
     { 
      JavaScriptEventM e = domEvents[i]; 
      e.xpath = getXPathToNode(e.source , false); 
      retVal.Add(e); 
     } 

     return retVal; 
    } 

このコードはdomEventsと呼ばれるリストのすべてのメンバーにアクセスし、そのxpathパブリックフィールドを変更して、別のリストでも参照を格納することになっている(retValと呼ばれる)

私はこの関数を呼び出し、xpathフィールドがnullに設定されたのJavaScriptEventMオブジェクトを渡します。不思議なことに、関数が返された後にretValで返されたオブジェクトはxpathフィールドを変更しましたが、元のdomEventsリストはこの関数のパラメータとして渡されました。すなわち、元のリスト内のオブジェクトは、まだxpathフィールドがヌルに設定されています。

Listの配列サブスクリプション演算子を使用してオブジェクトにアクセスすると、実際にオブジェクトのクローンが取得されますか? Listのすべての要素に1つずつアクセスして変更するにはどうすればよいですか?

+7

'JavaScriptEventM'は' struct'ですか? – Aliostad

+0

'ref'を渡すとどうなりますか? – mattytommo

+0

はい、実際は構造体です。何か違いはありますか? –

答えて

3

正確に何が行われているかわからない限り、C#でstructを使用しないでください。私。構造体の値のセマンティクスは、元のデータが変更されないような問題につながります。

C++とは異なり、C#ではstructclassの間に大きな違いがあります。

Classes and Structs

What's the difference between struct and class in .NET?

関連する問題