我有一个功能:
public static object? ToType(Type type, object? value)
我想创建一个有用的快捷方式,例如:
public static T ToType<T>(object? value)
{
return (T)ToType(typeof(T), value);
}
启用了可空检查的C#8.0编译器将发出以下警告:
[
CS8601
:可能的空引用分配。
[Function接受string
,int
和其他类型,所以我不能设置像class
这样的通用约束。同样,它可以返回null
。使用T?
进行转换和返回会产生编译器错误。
是否有解决警告的方法?
要使编译器不必担心null引用,只需确保要转换的对象不为null。
[return: MaybeNull]
public static T ToType<T>(object? value)
{
var res = ToType(typeof(T), value) ?? new object();
return res is T generic ? generic : default;
}
恕我直言,这种处理类型气味的方法。您想用ToType
实现什么?也许您可以从中获得一些更清洁的方法。