在C#中可以使用在值类型后加问号(如“int?”)的方式定义可空的类型,该定义出来的类型实际是一个“Nullable<T>”的泛型类型。但是在对该类型数据进行强制转换等操作时会因为数据类型不匹配等原因无法转换,这个时候我们就需要取出该可空类型的实际基础类型:
// 定义可空泛型值类型 Type type = typeof(int?); // 判断目标type是否是可空的泛型类型 if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>)) { // 取出可空泛型类型中的基础类型 type = Nullable.GetUnderlyingType(type); } // 返回基础值类型:int return type;