Непонятное поведение List - C#
Формулировка задачи:
class Program
{
static void Main(string[] args)
{
var list = new List<int> { 1, 2, 3 };
var x1 = new { Items = ((IEnumerable<int>)list).GetEnumerator() };
while (x1.Items.MoveNext())
{
Console.WriteLine(x1.Items.Current);
}
Console.ReadLine();
var x2 = new { Items = list.GetEnumerator() };
while (x2.Items.MoveNext())
{
Console.WriteLine(x2.Items.Current);
}
}
}Решение задачи: «Непонятное поведение List»
textual
Листинг программы
static void Main(string[] args)
{
A a = new A();
Console.WriteLine("Исходное значение Mutable.X: {0}", a.Mutable.X);
a.Mutable.IncrementX();
Console.WriteLine("Mutable.X после вызова IncrementX(): {0}", a.Mutable.X);
////////////////////////////////////////////////////////
/* согласно спецификации, при обращении к полю только для чтения вне конструктора,
генерируется временная переменная, для которой и вызывается метод IncrementX */
////////////////////////////////////////////////////////
B b = new B();
Console.WriteLine("Исходное значение M.X: {0}", b.M.X);
b.M.IncrementX();
b.M.IncrementX();
b.M.IncrementX();
Console.WriteLine("M.X после трех вызовов IncrementX: {0}", b.M.X);
/////////////////////////////////////////////////////////////
Console.ReadKey(true);
}