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、その本に書き込みます (同じ本なので、リスト内の学生は、これらの変更が加えられた本を指し示します)。