本文探討了在 C# 中實現類型推斷的挑戰,重點關注部分泛型類型推斷的局限性和潛在解決方案。
所描述的用例是擴充方法應該可用於特定基類,並且具有與方法參數相關的通用參數。但是,擴展方法也應該傳回與調用它的特定後代相關的特定類型。
事實證明,C# 中不直接支持部分泛型類型推論。不過,有一些策略可以達到類似的結果。
方法1:使用類型限制
語法類似於所需的程式碼可以使用類型限制來實作:
public static TReg Parameter<TReg, T>(this TReg p, string name, T value) where TReg : ParameterizedRegistrationBase
這種方法需要在呼叫期間指定兩個泛型型別參數,這可能不適用於所有情況。
方法2:在包裝器中使用兩個函數
此方法涉及將操作拆分為兩個函數:
public static ThatAreWrapper<TSource> That<TSource>(this IEnumerable<TSource> source) { return new ThatAreWrapper<TSource>(source); } public class ThatAreWrapper<TSource> { // ... Implementation }
和:
listOfFruits.That().Are<Banana>().Where(banana => banana.Peel != Color.Black)
這個解決方法需要額外的步驟,但可以更靈活地指定結果類型。
方法 3:擴展基類
將擴展方法直接引入基類中類,問題就可以避免了。但是,這種方法消除了將來在其他類別上使用擴展方法的能力。
C# 中不直接支持部分泛型類型推斷,但有一些解決方法可以提供類似的功能。具體使用方法取決於具體要求和所涉及的權衡。
以上是C# 可以實現部分泛型類型推論嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!