Pergunta

em c#,

var x = new {};

declara um tipo anônimo, sem propriedades.Isso é diferente de

var x = new object();

?

Foi útil?

Solução

Sim, os tipos usados são diferentes.Você pode dizer isto em tempo de compilação:

var x = new {};
// Won't compile - no implicit conversion from object to the anonymous type
x = new object(); 

Se você está perguntando se new{} é sempre útil - bem, isso é um assunto diferente...Eu não penso imediatamente qualquer sensata usos para ele.

Outras dicas

Bem, para iniciantes, o objeto é um tipo real e não anônimo ... se você fizer x.gettype () no segundo exemplo, você receberá o System.Object.

Juntamente com o retorno do GetType, como mencionado, X não seria do objeto de tipo, para que você não pudesse atribuir um tipo de objeto a essa variável.

        var x = new { };
        var y = new object();

        //x = y; //not allowed
        y = x; //allowed

A resposta de Jon Skeet era principalmente o que eu queria, mas, por uma questão de completude, aqui estão mais algumas diferenças, obtidas com o refletor:

new {} substitui três métodos de object :

  1. Equals - como mencionado em outras respostas, new object e new {} têm tipos diferentes, para que não sejam iguais.
  2. GetHashCode retorna 0 para new {} (Mas por que você colocaria em uma mesa de hash, afinal?)
  3. ToString imprime "{}" para new {}

Infelizmente, não consigo pensar em uma aplicação prática para tudo isso. Eu só estava curioso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top