ホームページ >バックエンド開発 >C++ >リフレクションは .NET で Null 許容参照型をどのように決定できるでしょうか?

リフレクションは .NET で Null 許容参照型をどのように決定できるでしょうか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-18 10:26:10244ブラウズ

How Can Reflection Determine Nullable Reference Types in .NET?

リフレクションを利用して .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 可能性のためにバイト値を使用します:

  • 0: 指定なし (デフォルトでは Null 可能)
  • 1: null 値を許容できません
  • 2: Null 可能

結論:

リフレクションにより、開発者はクラス プロパティ内の null 許容参照型を識別できるようになります。この機能は、型の安全性を維持し、null 参照例外を防ぐために不可欠です。

以上がリフレクションは .NET で Null 許容参照型をどのように決定できるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。