Para i = 0, por que (i + = i ++) é igual a 0?

Pegue o seguinte código (utilizável como um aplicativo de console):

static void Main(string[] args)
{
    int i = 0;
    i += i++;
    Console.WriteLine(i);
    Console.ReadLine();
}

O resultado dei é 0. Eu esperava 2 (como alguns dos meus colegas fizeram). Provavelmente o compilador cria algum tipo de estrutura que resulta emi sendo zero.

A razão pela qual eu esperava 2 é que, na minha linha de pensamento, a declaração da mão direita seria avaliada primeiro, incrementando i com 1. Do que é adicionado a i. Desde que eu já é 1, é adicionar 1 a 1. Então 1 + 1 = 2. Obviamente, isso não é o que está acontecendo.

Você pode explicar o que o compilador faz ou o que acontece no tempo de execução? Por que o resultado é zero?

Algum tipo de aviso: Estou absolutamente ciente de que você não vai (e provavelmente não deveria) usar esse código. Eu sei que nunca vou. No entanto, acho interessante saber porque age de tal maneira e o que está acontecendo exatamente.

questionAnswers(24)

yourAnswerToTheQuestion