s.ToUpper()
まず、そのままでは は実際には変化しないことに注意することから始めましょうs
。他の多くの回答が言及しているように、C#の文字列は不変であるため、これは不可能です。あなたがしたので、あなたはこれを認識していると思いますs = s.ToUpper()
。
AList
には項目への参照が含まれています。
ForEach
これらの参照のコピーを提供します (s
この場合は に保存されます)。
を再割り当てs
すると、元の参照は変更されず、コピーのみが変更されますs
。
元の参照と同じオブジェクトを参照するため、(つまりを再割り当てするのではなく)変更s
(つまり) した場合、実際にはリストが変更されます。s.someModifyingFunction()
s = ...
s
MarcinJuraszek が述べたように、単純な通常の for ループを使用すると動作するはずです。
for(int i = 0; i < fruit.Count; i++)
fruit[i] = fruit[i].ToUpper();
それをイメージするには、次のように考えてください。
オブジェクトは本です。
リストには、それぞれが本を指している生徒がたくさん含まれています。
するとForEach
、リスト内の生徒の 1 人と同じ本を指し示す新しい生徒が得られます。
を再割り当てするときs
、新しい生徒に別の本を指すように依頼します。リスト内の学生は、以前と同じ本をまだ指しています。
を変更するときはs
、その本に書き込みます (同じ本なので、リスト内の学生は、これらの変更が加えられた本を指し示します)。