概要
string?
のようなNull許容かどうかを確認する方法を記述します。
System.Runtime.CompilerServices.NullableAttribute
を使えば良いという記事を見かけますが、.NET 7
ではinternal
になっていて使えなくなっていたため最新の方法を調査しましたので記事にします。
コード
using System.Reflection;
static class TypeExtensions
{
public static bool IsNullableReference(this PropertyInfo _this)
{
var nullabilityInfoContext = new NullabilityInfoContext();
switch(nullabilityInfoContext.Create(_this).ReadState)
{
case NullabilityState.Nullable:
return true;
case NullabilityState.NotNull:
return false;
default:
throw new InvalidOperationException("Nullable reference must be enabled");
}
}
}
ちなみにNullabilityInfoContext
をフィールドに置いて使い回したら例外が発生しました。毎回生成するのが正解のようです。