ジェネリック型を推論するためにC#コンパイラを取得するには?
次のメソッドがあります:public TResult Get<TGenericType, TResult>()
where TGenericType : SomeGenericType<TResult>
where TResult : IConvertible {
//...code that uses TGenericType...
//...code that sets someValue...
return (TResult) someValue;
}
このメソッドのユーザーは、このように使用する必要があります。
//Notice the duplicate int type specification
int number = Get<SomeGenericType<int>, int>();
なぜメソッド定義にTResultを指定する必要がありますか?コンパイラはTGenericTypeで指定してから既にTResultを知っています。理想的には(C#コンパイラが少しスマートだった場合)、私の方法は次のようになります:
public TResult Get<TGenericType>()
where TGenericType : SomeGenericType<TResult>
where TResult : IConvertible {
//...code that uses TGenericType...
//...code that sets someValue...
return (TResult) someValue;
}
したがって、ユーザーは単純に次のように使用できます:
//Much cleaner
int number = Get<SomeGenericType<int>>();
私がやりたいこと?
質問の説明から* stupid *などの修飾語を削除すると効果があります。 – EFraim
これは愚かなコンパイラですよね? ;)私は余分な解説を取り除いた。これは実際にはそれがなければ妥当な質問です。 –
タイプパラメータの一部だけを使用する方法がないと答えたので、おそらくあなたは達成したいことに関して質問を再定式化するべきでしょう。 C#言語の定義に違反するコードをコンパイルするにはどうすればいいですか?したがって、それは「本当の質問ではない」として閉じられるべきです。 –