![](/img/trans.png)
[英]Help with C# generics error - “The type 'T' must be a non-nullable value type”
[英]Return non-nullable type with C# generics, accepting a nullable type
我想要一個檢查 null 的通用方法,如果它是 null,它應該拋出異常,如果不是,它應該返回它的不可空類型。
我有一個通用方法,稱為GetRequiredValue
:
public static TValue GetRequiredValue<TClass, TValue>(this TClass obj, Expression<Func<TClass, TValue>> expression)
{
// Omitted reflection logic to get property value of the object
var value = ...;
if (value is null) throw new Exception("Value is null.");
return value;
}
一個 class,包含一個可為 null 的字符串屬性:
public class MyClass
{
public string? Name { get; set; }
}
調用GetRequiredValue
時,返回類型是string?
,但我知道它是不可為 null 的版本:
var val = obj.GetRequiredValue(x => x.Name); // return type is string?
甚至可以返回不可為空的類型嗎?
這是應該使用NotNullAttribute
的地方。
指定 output 不是 null,即使相應類型允許也是如此。 指定當調用返回時輸入參數不是 null。
用它注釋GetRequiredValue
的返回類型:
[return: NotNull]
public static TValue GetRequiredValue<TClass, TValue>(this TClass obj, Expression<Func<TClass, TValue>> expression)
另見: 可空 static 分析
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.