Von dem, was ich sehe, es ist ein vollkommen gut ist, absolut gültige boxedSystem.Void
Werttyp :-)
Sie können
Console.WriteLine(voidObject.GetType());
und sehen, dass es ein System.Void
ist.
System.Void
ein Werttyp ist, so sollte es durch FormatterServices.GetUninitializedObject
Schaffung gleich (object)default(void)
zu tun (weil FormatterServices.GetUninitializedObject
einen Werttyp mit all seinen Feldern auf ihren Standardwert zurück) (Anmerkung, die eindeutig (object)default(void)
illegal ist).
Noch gibt es nicht viele Dinge, die Sie mit Ihrem boxedSystem.Void
tun können ...
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());
Es scheint einige Unterschiede zwischen .NET und Mono Implementierungen ... On zu sein.NET alle Instanzen von System.Void
die gleiche GetHashCode()
, während auf Mono jeder von ihnen eine andere GetHashCode()
hat. Die Equals
ordnungsgemäß funktioniert (true
) für beide.
(beachten Sie, dass der Unterschied in den GetHashCode()
scheint mit struct
s ohne Felder ein Fehler von Mono zu sein: https://ideone.com/t0t8I6 dass should be fixed in neueren Versionen)
Wow ... völlig nutzlos, aber unglaublich :-) Sie zu schließen vergessen, dieser Weg :-) – xanatos
bekam ich diese 'Ausdruck ausgewertet wurde, und hat keine value' –
auf .NET https://dotnetfiddle.net/BUUdKU und auf Mono https://ideone.com/LegWvM – xanatos