Da quello che posso vedere che è un buon perfettamente, perfettamente valido inscatolatoSystem.Void
tipo di valore :-)
Puoi
Console.WriteLine(voidObject.GetType());
e vedere che si tratta di un System.Void
.
System.Void
è un tipo di valore, in modo da creare attraverso FormatterServices.GetUninitializedObject
dovrebbe essere uguale a fare (object)default(void)
(perché FormatterServices.GetUninitializedObject
restituirà un tipo di valore con tutti i suoi campi impostati al loro valore di default) (nota che chiaramente (object)default(void)
è illegale).
Ancora non ci sono molte cose che potete fare con il vostro boxedSystem.Void
...
var voidObject = System.Runtime.Serialization.FormatterServices.GetUninitializedObject(typeof(void));
var voidObject2 = System.Runtime.Serialization.FormatterServices.GetUninitializedObject(typeof(void));
Console.WriteLine("Type: {0}", voidObject.GetType());
Console.WriteLine("IsValueType: {0}", voidObject.GetType().IsValueType);
Console.WriteLine("Equals: {0}", voidObject.Equals(voidObject2));
Console.WriteLine("GetHashCode1: {0}", voidObject.GetHashCode());
Console.WriteLine("GetHashCode2: {0}", voidObject2.GetHashCode());
Console.WriteLine("ToString: {0}", voidObject.ToString());
Sembra che ci sia alcune differenze tra .NET e Mono implementazioni ... On.NET tutte le istanze di System.Void
hanno lo stesso GetHashCode()
, mentre su Mono ognuna di esse ha un diverso GetHashCode()
. Il Equals
funziona correttamente (true
) per entrambi.
(si noti che la differenza di GetHashCode()
sembra essere un bug di Mono, con struct
s senza campi: https://ideone.com/t0t8I6 che should be fixed nelle versioni più recenti)
Wow ... Totalmente inutile ma incredibile :-) Hanno dimenticato di chiudere quel percorso :-) – xanatos
Ho ottenuto questo 'Espressione è stata valutata e non ha valore' –
Su .NET https://dotnetfiddle.net/BUUdKU e su Mono https://ideone.com/LegWvM – xanatos