Из того, что я могу видеть, что это совершенно хорошо, отлично действует боксировалSystem.Void
тип значения :-)
Вы можете
Console.WriteLine(voidObject.GetType());
и видеть, что это System.Void
.
System.Void
является типом значения, поэтому его создание через FormatterServices.GetUninitializedObject
должно быть равно делать (object)default(void)
(потому что FormatterServices.GetUninitializedObject
возвращает значение типа со всеми полями, установленных в их значение по умолчанию) (обратите внимание, что явно (object)default(void)
является незаконным).
Еще есть не так много вещей, которые вы можете сделать с вашими штучногоSystem.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());
Там, кажется, некоторые различия между .NET и Mono реализациями ... On.NET все экземпляры System.Void
имеют одинаковые GetHashCode()
, а на Mono каждый из них имеет GetHashCode()
. Equals
работает правильно (true
) для обоих из них.
(обратите внимание, что разница в GetHashCode()
кажется ошибка в Mono с struct
с без полей: https://ideone.com/t0t8I6 что should be fixed в новых версиях)
Wow ... Полностью бесполезный, но невероятно :-) Они забыли закрыть что маршрут :-) – xanatos
Я получил это выражение было оценено и не имеет значения –
На. NET https://dotnetfiddle.net/BUUdKU и на Моно https://ideone.com/LegWvM – xanatos