Я много знаю о 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;
}
Какой аспект C # останавливает вывод моего изменения "MagicNumber = 42"? Есть ли способ, которым я могу получить свои изменения, чтобы "придерживаться", не делая прикольного преобразования в List <> или массив?
Спасибо!
-Mike