我對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;
}
#停止哪些方面C1的被輸出我的「MagicNumber = 42」的變化?有沒有辦法讓我的變化「堅持」,而不做一些時髦的轉換到列表<>或數組?
謝謝! -Mike
是+1。對於原始問題中定義的`items`,每次`items`被迭代時,創建新的`SubItem`實例。 '.First()`迭代一次,`Write`第二次迭代它。這樣做的另一個結果是(item`仍然和原始問題一樣)`items.First()== items.First()`評估爲`false`。 – 2013-01-28 15:50:06