Вот то, что я придумал, так как все остальное казалось неудачным - по крайней мере на PLC - Portable Class Library / .NET Core с> = C # 6
Решение: Расширить статические методы для любых типов T
и Nullable<T>
и использовать тот факт, что будет вызван метод статического расширения, соответствующий базовому типу, и он будет иметь приоритет над универсальным T
метод расширения.
Для T
:
public static partial class ObjectExtension
{
public static bool IsNullable<T>(this T self)
{
return false;
}
}
и для Nullable<T>
public static partial class NullableExtension
{
public static bool IsNullable<T>(this Nullable<T> self) where T : struct
{
return true;
}
}
Использование Reflection и type.IsGenericType
... не работало на моем текущем наборе .NET Runtime. Также не помогла Документация MSDN .
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>)) {…}
Частично потому, что API-интерфейс Reflection значительно изменился в .NET Core.