私は C# についてよく知っていますが、これは私を困惑させ、Google は役に立ちません。
オブジェクトの IEnumerable 範囲があります。最初のものにプロパティを設定したい。そうしますが、変更後にオブジェクトの範囲を列挙すると、変更が表示されません。
問題の良い例を次に示します。
public static void GenericCollectionModifier()
{
// 1, 2, 3, 4... 10
var range = Enumerable.Range(1, 10);
// Convert range into SubItem classes
var items = range.Select(i => new SubItem() {Name = "foo", MagicNumber = i});
Write(items); // Expect to output 1,2,3,4,5,6,7,8,9,10
// Make a change
items.First().MagicNumber = 42;
Write(items); // Expect to output 42,2,3,4,5,6,7,8,9,10
// Actual output: 1,2,3,4,5,6,7,8,9,10
}
public static void Write(IEnumerable<SubItem> items)
{
Console.WriteLine(string.Join(", ", items.Select(item => item.MagicNumber.ToString()).ToArray()));
}
public class SubItem
{
public string Name;
public int MagicNumber;
}
「MagicNumber = 42」の変更が出力されない C# の側面は何ですか? List<> または配列へのファンキーな変換を行わずに、変更を「固定」する方法はありますか?
ありがとう!-マイク