在 C# 中,确定值类型是否可为 null 很简单。具体来说,您可以从
Type
本身获取此信息;例如:
public static bool IsNullable(this Type type) =>
type.IsValueType && Nullable.GetUnderlyingType(type) is not null;
据我了解,可以通过
NullableAttribute
或 NullableContextAttribute
获取可空引用类型的可空性信息,但似乎必须从 MemberInfo
获取,而不是从 Type
获取。
这种理解是否正确,或者是否有解决方法可以从
Type
获取可空引用类型的可空性信息?
可空引用类型不是新的类类型,而是 现有引用类型的注释。编译器使用那些 注释可帮助您发现潜在的空引用错误 代码。不可为空引用之间没有运行时差异 类型和可为 null 的引用类型。
这就是为什么不能在可为 null 的引用类型上使用
typof
的原因:
Type t = typeof(string?); // error CS8639
因此,如果您想检查它是否可为空,则需要
PropertyInfo
或 FieldInfo
,例如:
public static bool IsMarkedAsNullable(PropertyInfo p)
{
return new NullabilityInfoContext().Create(p).WriteState is NullabilityState.Nullable;
}