Domanda

in c #,

var x = new {};

dichiara un tipo anonimo senza proprietà. È diverso da

var x = new object();

È stato utile?

Soluzione

Sì, i tipi utilizzati sono diversi. Puoi dirlo in fase di compilazione:

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

Se ti stai chiedendo se new {} sia mai utile - beh, è ??una questione diversa ... Non riesco immediatamente a pensare a nessun uso ragionevole per esso.

Altri suggerimenti

Bene, per cominciare, l'oggetto è un tipo reale, non anonimo ... se si fa x.GetType () sul secondo esempio, si torna a System.Object.

Insieme al ritorno da GetType come menzionato, x non sarebbe di tipo object, quindi non saresti in grado di assegnare un tipo di oggetto a quella variabile.

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

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

La risposta di Jon Skeet era principalmente quello che volevo, ma per completezza qui ci sono alcune differenze, acquisite dal riflettore:

new {} ignora tre metodi di oggetto :

  1. Uguale - come indicato in altre risposte, nuovo oggetto e nuovo {} hanno tipi diversi, quindi non sono uguali.
  2. GetHashCode restituisce 0 per new {} (ma perché lo inseriresti comunque in una tabella hash?)
  3. ToString stampa " {} " per nuovo {}

Purtroppo non riesco a pensare a un'applicazione pratica per tutto questo. Ero solo curioso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top