ホームページ > バックエンド開発 > C++ > C# は部分ジェネリック型推論を実装できますか?実装できる場合はどのように実装すればよいですか?

C# は部分ジェネリック型推論を実装できますか?実装できる場合はどのように実装すればよいですか?

Barbara Streisand
リリース: 2024-12-31 02:55:09
オリジナル
491 人が閲覧しました

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

部分ジェネリック型推論は C# で実装できますか?

概要

この記事では、C# で型推論を実装する際の課題について説明します。部分的なジェネリック型推論の制限と潜在的な解決策。

問題

説明されている使用例は、メソッド引数に関連する汎用パラメーターを使用して、拡張メソッドが特定の基本クラスで使用可能である必要がある場合です。ただし、拡張メソッドは、呼び出された特定の子孫に関連する特定の型も返す必要があります。

解決策

結局のところ、部分的なジェネリック型推論は C# では直接サポートされていません。 。ただし、同様の結果を達成できる戦略があります。

部分ジェネリック型推論のソリューション

方法 1: 型制約を使用する

構文type を使用して、目的のコードと同様のコードを実現できます。制約:

public static TReg Parameter<TReg, T>(this TReg p, string name, T value)
    where TReg : ParameterizedRegistrationBase
ログイン後にコピー

このアプローチでは、呼び出し時に両方のジェネリック型引数を指定する必要がありますが、これはすべての場合において望ましいとは限りません。

方法 2: Wrapper で 2 つの関数を使用する

このアプローチには、操作を 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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート