C'è qualche differenza tra `new object ()` e `new {}` in c #?
-
06-07-2019 - |
Domanda
in c #,
var x = new {};
dichiara un tipo anonimo senza proprietà. È diverso da
var x = new object();
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
:
-
Uguale
- come indicato in altre risposte,nuovo oggetto
enuovo {}
hanno tipi diversi, quindi non sono uguali. -
GetHashCode
restituisce 0 pernew {}
(ma perché lo inseriresti comunque in una tabella hash?) -
ToString
stampa " {} " pernuovo {}
Purtroppo non riesco a pensare a un'applicazione pratica per tutto questo. Ero solo curioso.