首頁 >後端開發 >C++ >C# 可以實現部分泛型類型推論嗎?

C# 可以實現部分泛型類型推論嗎?

Barbara Streisand
Barbara Streisand原創
2024-12-31 02:55:09486瀏覽

Can C# Implement Partial Generic Type Inference, and If So, How?

可以在 C# 中實現部分泛型類型推論嗎?

概述

本文探討了在 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn