为什么接受引用类型的泛型方法不接受可空类型作为参数?

时间:2019-11-14 19:15:40

标签: c# .net generics nullable value-type

一目了然

public static class Conversion
{
    public static T Read<T>(object value) where T :class
    {
        if (value is DBNull) return null;
        if (value is null) return null;

        if (value is Enum) return (T)Enum.Parse(typeof(T), value.ToString(), true);
        return (T)Convert.ChangeType(value, typeof(T));
    }
}

何时调用Read<T>函数

var myVariable = Conversion.Read<bool?>(Row[nameof(IsFetchNextRecordAfterDelete)]);
  

错误CS0452类型“布尔?”必须是引用类型才能使用   在通用类型或方法中将其作为参数“ T”   'Conversion.Read(object)'

想知道为什么吗??是可为空的,表示其是引用类型,并且通用方法声明为where T : class

2 个答案:

答案 0 :(得分:4)

“笨蛋?”是不是参考类型。这是可为空的类型。 参见Nullable value types (C# reference) 基础类型是结构(它是值类型)。

答案 1 :(得分:2)

where T :class

此约束意味着您将提供的type参数将是包含任何类,接口,委托或数组类型的引用类型。 Type Constraints

可空类型属于值类型类别,不能作为参考。