在 C# 中從泛型方法傳回 Null 值
在 C# 泛型方法中,當類型參數可以是引用型別或值型別時,傳回 null 並不總是那麼簡單。當傳回類型為類型參數 T 時,就會出現此問題。
考慮以下程式碼片段:
<code class="language-csharp">static T FindThing<T>(IList collection, int id) where T : IThing, new() { foreach (T thing in collection) { if (thing.Id == id) return thing; } return null; // 错误:无法将 null 转换为类型参数“T”,因为它可能是值类型。请考虑改用“default(T)”代替。 }</code>
這段程式碼嘗試在集合中找不到匹配元素時傳回 null,但會發生建置錯誤。錯誤訊息指出,由於 T 可能是值類型,因此無法將 null 轉換為類型參數 T。
有三種方法可以解決此問題:
傳回預設值:您可以使用 default(T)
傳回類型 T 的預設值。這將為引用類型傳回 null,並為值類型傳回適當的預設值,例如 int 為 0,char 為 ' '。
將 T 限制為引用類型:如果您知道 T 只能是引用類型,則可以在方法宣告中新增 限制。這將允許您像往常一樣返回 null。 where T : class
將 T 限制為非空值類型:如果您知道 T 將是非空值類型,則可以新增 約束並像往常一樣傳回 null。請注意,這將傳回可空值類型的 null 值,而不是 null 參考。 where T : struct
以上是如何從具有類型參數 T 的 C# 泛型方法安全地傳回 Null?的詳細內容。更多資訊請關注PHP中文網其他相關文章!