Tôi đang tạo một hệ thống biến một tập lệnh nhỏ thành một dll. Tôi gặp phải một vấn đề khi tôi cố gắng để có một lớp giá trị nullable và làm cho nó giá trị mặc định của một tham số. Vấn đề là tôi cần phải tạo một thể hiện của người dùng được chọn nullable trong trình biên dịch và thiết lập nó như là hằng số.Tạo một đối tượng nullable qua Activator.CreateInstance trả về null
Thật không may, bất cứ khi nào tôi sử dụng Activator.CreateInstance(NullableType)
(trong đó NullableType là loại được tạo từ đầu vào của người dùng), tôi nhận được null
làm giá trị trả lại. Ví dụ: chỉ cần thực hiện:
object Test = Activator.CreateInstance(typeof(Nullable<int>));
Console.WriteLine(Test == null);
trả về true. Điều này CHỈ xảy ra với Nullables. Một cấu trúc được tạo ra trong C#, thậm chí một cấu trúc chung, được tạo ra tốt. Heck, nếu tôi sao chép & dán nullable từ DotNetReflector (và loại bỏ TypeDependencyAttribute, TargetPatchingOptOutAttribute, và ThrowHelper cuộc gọi kể từ khi tôi không có quyền truy cập vào những người), nó cho thấy sai ở trên.
Điều gì đang xảy ra? Có cách nào khác có thể để tạo ra một nullable khi tôi không biết các thông số chung cho đến khi thời gian chạy?
Mô-đun và tham chiếu optParam là gì? –
1. Hack rất điên. 2. Nullables là null trong một hình thức đối tượng - điều này là do thiết kế. 3. Thêm mô tả xin vui lòng. – Vlad
Vâng, đó là một hack điên. Đó là để làm việc xung quanh 'ParameterBuilder.SetConstant' có một' if (value == null) ném mới ArgumentException (...) '. Mã nguồn gốc thực tế mà 'ParameterBuilder.SetConstant' sử dụng (đó là riêng tư và những gì tôi đang phản ánh ở trên) là tốt với Nullables là null, bởi vì nó là do thiết kế. Nó chỉ đơn giản là chức năng quản lý công cộng, được quản lý có chứa một lỗi và yêu cầu bỏ qua. Lỗi này đã được sửa chữa, vì vậy câu trả lời này không còn cần thiết trừ khi bạn đang nhắm mục tiêu 3.5 trở xuống. –