我对 C# 了解很多,但这个让我很困惑,而谷歌也没有帮助。
我有一个 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<> 或数组?
谢谢!-麦克风