确定类型在运行时是否可为空

问题描述 投票:0回答:1

在 C# 中,确定值类型是否可为 null 很简单。具体来说,您可以从

Type
本身获取此信息;例如:

public static bool IsNullable(this Type type) =>
    type.IsValueType && Nullable.GetUnderlyingType(type) is not null;

据我了解,可以通过

NullableAttribute
NullableContextAttribute
获取可空引用类型的可空性信息,但似乎必须从
MemberInfo
获取,而不是从
Type
获取。

这种理解是否正确,或者是否有解决方法可以从

Type
获取可空引用类型的可空性信息?

c# reflection nullable-reference-types
1个回答
0
投票

可空引用类型(C# 参考):

可空引用类型不是新的类类型,而是 现有引用类型的注释。编译器使用那些 注释可帮助您发现潜在的空引用错误 代码。不可为空引用之间没有运行时差异 类型和可为 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;
}
© www.soinside.com 2019 - 2024. All rights reserved.