2012-08-01 11 views
5

無制限ジェネリック型であるジェネリック制約を持つことは可能ですか?制約としてC#無制限ジェネリック型

例えば:

public T DoSomething<T>(T dictionary) where T : IDictionary<,> 
{ 
    ... 
} 

編集:だけコンテキストを説明するために、私はIDictionaryをする方法の使用を制限したいのですが、方法自体のために、それは正確に問題ではありません。 TKeyとTValueは何ですか?

+4

'public V DoSomething (IDictionary 辞書)これはあなたの意志ですか? – oleksii

+1

Amir Abiri、戻り値の型をパラメータ型 'T'と同じにしたいのはなぜですか?あなたはパラメータを返すつもりですか?おそらくその必要はありません。そしてもう一つの 'T'を簡単に作ることはできません。 'T:new()'にも制約を加えたくない場合を除きます。 –

答えて

6

これができない、あなたは型パラメータを指定する必要があります。

public T DoSomething<T, TKey, TValue>(T dictionary) where T : IDictionary<TKey, TValue> { ... } 
+1

面白いのは、TKeyとTValueがTから推論できるということです。メソッドのどこにでも必要はありません。だから私はジェネリック署名をよりきれいにすることを望んでいました。 –

+0

@AmirAbiri - 代わりに 'T'を非総称' IDictionary'に制限できますか? – Lee

+0

実際には、例を単純化するためにIDictionaryを使用しました。私の実際のタイプは「BaseGameState のサブクラス」です(つまり、Tはインターフェイスではありません。私自身の基本クラスです)。 –

0

いいえ、あなたはそれを行うことはできません。たぶん、あなたは

public IDictionary<TKey, TValue> DoSomething<TKey, TValue>(IDictionary<TKey, TValue> dictionary) 
{ 
... 
} 
1

を使用することができますが、それはまだ終わっていないrosylin githubで問題があります。だから、今はできませんが、私はそれが比較的早くなると思います。

関連する問題