Đây là trong dự án .NET Core 1.1.4, vì vậy hãy xem xét điều này.Truyền một `Nullable <T>` làm tham số Kiểu cho hàm C#
Tôi đang cố tạo một hàm xác minh xem giá trị có thể được gán cho loại không, nhưng tôi đang gặp sự cố với các loại Nullable<T>
.
chức năng của tôi:
protected void CheckIsAssignable(Object value, Type destinationType)
{
if (value == null)
{
// Nullable.GetUnderlyingType returns null for non-nullable types.
if (Nullable.GetUnderlyingType(destinationType) == null)
{
var message =
String.Format(
"Property Type mismatch. Tried to assign null to type {0}",
destinationType.FullName
);
throw new TargetException(message);
}
}
else
{
// If destinationType is nullable, we want to determine if
// the underlying type can store the value.
if (Nullable.GetUnderlyingType(destinationType) != null)
{
// Remove the Nullable<T> wrapper
destinationType = Nullable.GetUnderlyingType(destinationType);
}
// We can now verify assignability with a non-null value.
if (!destinationType.GetTypeInfo().IsAssignableFrom(value.GetType()))
{
var message =
String.Format(
"Tried to assign {0} of type {1} to type {2}",
value,
value.GetType().FullName,
destinationType.FullName
);
throw new TargetException(message);
}
}
}
Mệnh if
trên xử lý các trường hợp nếu value
là null
, và cố gắng để xác minh rằng destinationType
là Nullable<T>
; mệnh đề else
xử lý nếu value
thực sự chứa thứ gì đó, do đó, nó cố gắng xác định xem bạn có thể gán nó cho destinationType
hoặc, nếu đó là Nullable<T>
, có thể gán cho T
.
Sự cố là Nullable<T>
không phải là Type
, do đó, hãy gọi CheckIfAssignable(3, Nullable<Int32>)
không khớp với chữ ký chức năng.
Thay đổi chữ ký:
protected void CheckIsAssignable(Object value, ValueType destinationType)
cho phép tôi vượt qua một Nullable<T>
, nhưng sau đó tôi không thể gửi nó như một cuộc tranh cãi để Nullable.GetUnderlyingType
.
Tôi không chắc liệu mình đã quá phức tạp vấn đề với điều này chưa, nhưng tôi cảm thấy có một giải pháp đơn giản mà tôi không thấy.
'Nullable' là loại, giống như bất kỳ loại nào khác. Sử dụng 'typeof()', giống như bất kỳ loại nào khác. –
SLaks