リフレクションを利用して .NET 内で Null 許容参照型を識別する
C# 8.0 以降のバージョンでは、コードの安全性が大幅に強化された null 許容参照型が導入されました。 これらの型は、プロパティが null 値を保持できるかどうかを明示的に定義するため、null 参照例外のリスクが軽減されます。
次の例を考えてみましょう:
<code class="language-csharp">public class Foo { public string? Bar { get; set; } }</code>
?
サフィックスは、Bar
を null 許容の参照型として指定します。 .NET リフレクションは、クラス プロパティが null 許容参照型を使用しているかどうかを判断するメカニズムを提供します。
方法 1: NullabilityInfoContext
(.NET 6 以降) を使用する
.NET 6 では NullabilityInfoContext
API が導入され、null 許容型の検出に対する合理化されたアプローチが提供されました。 これは推奨される方法です。
<code class="language-csharp">public static bool IsNullable(Type type) { var context = type.GetNullabilityInfoContext(); return context.ReadNullableAnnotation(type, out var annotation) && annotation == NullabilityState.Nullable; }</code>
方法 2: 手動属性検査 (.NET 6 以前)
.NET 6 より前では、手動による属性チェックが必要でした。 これらのヘルパー関数はこれを容易にします:
<code class="language-csharp">public static bool IsNullable(PropertyInfo property) => IsNullableHelper(property.PropertyType, property.DeclaringType, property.CustomAttributes); public static bool IsNullable(FieldInfo field) => IsNullableHelper(field.FieldType, field.DeclaringType, field.CustomAttributes); public static bool IsNullable(ParameterInfo parameter) => IsNullableHelper(parameter.ParameterType, parameter.Member, parameter.CustomAttributes);</code>
IsNullableHelper
関数は次の属性を検査します:
System.Runtime.CompilerServices.NullableAttribute
(null 許容プロパティを示します)System.Runtime.CompilerServices.NullableContextAttribute
(null 許容の囲み型を示します)バイト値の解釈:
どちらの属性も null 可能性のためにバイト値を使用します:
結論:
リフレクションにより、開発者はクラス プロパティ内の null 許容参照型を識別できるようになります。この機能は、型の安全性を維持し、null 参照例外を防ぐために不可欠です。
以上がリフレクションは .NET で Null 許容参照型をどのように決定できるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。