Từ những gì tôi có thể nhìn thấy nó là một cách hoàn hảo tốt, hoàn toàn hợp lệ đóng hộpSystem.Void
kiểu giá trị :-)
Bạn có thể
Console.WriteLine(voidObject.GetType());
và thấy rằng nó là một System.Void
.
System.Void
là một loại giá trị, vì vậy tạo ra nó thông qua FormatterServices.GetUninitializedObject
nên bằng làm (object)default(void)
(vì FormatterServices.GetUninitializedObject
sẽ trả về một kiểu giá trị với tất cả các lĩnh vực của nó đặt giá trị mặc định của họ) (lưu ý rằng rõ ràng (object)default(void)
là bất hợp pháp).
Tuy nhiên không có nhiều điều bạn có thể làm với bạn đóng hộpSystem.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());
Dường như có một số khác biệt giữa .NET và Mono triển khai ... Bật.NET tất cả các trường hợp của System.Void
có cùng một GetHashCode()
, trong khi trên Mono mỗi một trong số chúng có một khác nhau GetHashCode()
. Các Equals
hoạt động chính xác (true
) cho cả hai.
(lưu ý rằng sự khác biệt trong GetHashCode()
có vẻ là một lỗi của Mono với struct
s mà không lĩnh vực: https://ideone.com/t0t8I6 rằng should be fixed trong phiên bản mới hơn)
Wow ... Hoàn toàn vô dụng nhưng đáng kinh ngạc :-) Họ quên để đóng tuyến đường đó :-) – xanatos
Tôi nhận được 'Biểu thức này đã được đánh giá và không có giá trị' –
Bật .NET https://dotnetfiddle.net/BUUdKU và trên Mono https://ideone.com/LegWvM – xanatos