Como o ToString em um tipo anônimo funciona?

Eu estava mexendo com tipos anônimos, e eu acidentalmente enviei para o console. Parecia basicamente como eu defini isso.

Aqui está um pequeno programa que o reproduz:

using System;
class Program
{
    public static void Main(string[] args)
    {
        int Integer = 2;
        DateTime DateTime = DateTime.Now;
        Console.WriteLine(new { Test = 0, Integer, s = DateTime });
        Console.ReadKey(true);
    }
}

Agora, a saída é:

{ Test = 0, Integer = 2, s = 28/05/2013 15:07:19 }

Eu tentei usar o dotPeek para entrar na montagem para descobrir o porquê, mas não ajudou.[1] Aqui está o código dotPeek'd:

// Type: Program
// Assembly: MyProjectName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
// Assembly location: Not telling you! :P
using System;
internal class Program
{
  public static void Main(string[] args)
  {
    Console.WriteLine((object) new
    {
      Test = 0,
      Integer = 2,
      s = DateTime.Now
    });
    Console.ReadKey(true);
  }
}

Então não é muito diferente, afinal.

Então, como isso funciona? Como é que sai assim?

Notas:

[1]: Eu esqueci de ativar "Mostrar código gerado pelo compilador", essa é a razão pela qual eu não entendi como funciona.

questionAnswers(3)

yourAnswerToTheQuestion