> 백엔드 개발 > C++ > .NET에서 리플렉션이 Null 허용 참조 유형을 어떻게 결정할 수 있습니까?

.NET에서 리플렉션이 Null 허용 참조 유형을 어떻게 결정할 수 있습니까?

Barbara Streisand
풀어 주다: 2025-01-18 10:26:10
원래의
239명이 탐색했습니다.

How Can Reflection Determine Nullable Reference Types in .NET?

Reflection을 활용하여 .NET 내 Null 허용 참조 유형 식별

C# 8.0 이상 버전에서는 코드 안전성이 크게 향상되는 nullable 참조 유형이 도입되었습니다. 이러한 유형은 속성이 null 값을 보유할 수 있는지 여부를 명시적으로 정의하므로 null 참조 예외의 위험이 줄어듭니다.

다음 예를 고려해보세요.

<code class="language-csharp">public class Foo
{
    public string? Bar { get; set; }
}</code>
로그인 후 복사

? 접미사는 Bar을 null 허용 참조 유형으로 지정합니다. .NET 리플렉션은 클래스 속성이 nullable 참조 유형을 활용하는지 확인하는 메커니즘을 제공합니다.

방법 1: NullabilityInfoContext 활용(.NET 6 이상)

.NET 6에서는 null 허용 유형 감지에 대한 간소화된 접근 방식을 제공하는 NullabilityInfoContext API를 도입했습니다. 추천드리는 방법입니다.

<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 (nullable 포함 유형을 나타냄)

바이트 값 해석:

두 속성 모두 null 허용 여부에 대해 바이트 값을 사용합니다.

  • 0: 지정되지 않음(기본적으로 Null 가능)
  • 1: null을 허용하지 않음
  • 2: Null 가능

결론:

리플렉션을 통해 개발자는 클래스 속성에서 null 허용 참조 유형을 식별할 수 있습니다. 이 기능은 유형 안전성을 유지하고 null 참조 예외를 방지하는 데 필수적입니다.

위 내용은 .NET에서 리플렉션이 Null 허용 참조 유형을 어떻게 결정할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿