利用反射來辨識 .NET 中的可空參考型別
C# 8.0 及更高版本引入了可空引用類型,這是程式碼安全性的顯著增強。 這些類型明確定義屬性是否可以保存空值,從而降低空引用異常的風險。
考慮這個例子:
<code class="language-csharp">public class Foo { public string? Bar { get; set; } }</code>
?
字尾將 Bar
指定為可為 null 的參考型別。 .NET 反射提供了確定類別屬性是否使用可為空參考類型的機制。
方法 1:使用 NullabilityInfoContext
(.NET 6 及更高版本)
.NET 6 引進了 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
(表示可為空的封閉型別)位元組值解釋:
兩個屬性都使用位元組值來實現可空性:
結論:
反射使開發人員能夠識別類別屬性中可為空的參考類型。此功能對於維護類型安全性和防止空引用異常至關重要。
以上是反射如何決定 .NET 中的可空參考類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!