1

使用する場合、渡されるList<T>.ForEachオブジェクトは次のとおりです。つまり、j以下の例では、参照または値によって渡されますか?

MyList.ForEach( j => {} );

私が次のようなことをするとしたら:

MyList.ForEach( j => {
    j.someOtherList.Add("value");
});

これは、元のオブジェクトのコピーにj作用しますか?それとも元のオブジェクトに作用しますか?

4

2 に答える 2

9

渡されたオブジェクトはまったくありません- typeのTがあります。が参照型の場合T、その値は参照です。値は、通常どおり、値によって渡さます。

Tが と呼ばれるメンバーを持つ参照型であると仮定すると、コードはの値が参照するオブジェクトsomeOtherListに実際に影響しますが、 の値は単なる参照です。リスト内の値は同じ参照になるため、(たとえば) リストをもう一度反復すると、効果を確認できます。jj

重要なのは、コードを次のように変更した場合です。

MyList.ForEach( j => {
    j = new WhateverYourTypeIs()
});

リストにはまったく影響しません。

特に C# のコンテキストでは、値渡しと参照渡しがどのように機能するかについて少し混乱していると思います。私はあなたを助けるかもしれないトピックに関する記事を持っています.

于 2013-09-08T19:47:28.053 に答える