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;
    }

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

この関数を呼び出して、フィールドが null に設定されているオブジェクトListの を渡します。奇妙なことに、関数が戻った後、返されたオブジェクトのフィールドは変更されていますが、この関数にパラメーターとして渡された元のリストは変更されていません。つまり、元のリストのオブジェクトのフィールドはまだnull に設定されています。JavaScriptEventMxpathretValxpathdomEventsxpath

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

4

1 に答える 1

3

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

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

クラスと構造体

.NET の構造体とクラスの違いは何ですか? .

于 2012-04-17T17:04:11.660 に答える