無制限ジェネリック型であるジェネリック制約を持つことは可能ですか?制約としてC#無制限ジェネリック型
例えば:
public T DoSomething<T>(T dictionary) where T : IDictionary<,>
{
...
}
編集:だけコンテキストを説明するために、私はIDictionaryをする方法の使用を制限したいのですが、方法自体のために、それは正確に問題ではありません。 TKeyとTValueは何ですか?
無制限ジェネリック型であるジェネリック制約を持つことは可能ですか?制約としてC#無制限ジェネリック型
例えば:
public T DoSomething<T>(T dictionary) where T : IDictionary<,>
{
...
}
編集:だけコンテキストを説明するために、私はIDictionaryをする方法の使用を制限したいのですが、方法自体のために、それは正確に問題ではありません。 TKeyとTValueは何ですか?
これができない、あなたは型パラメータを指定する必要があります。
public T DoSomething<T, TKey, TValue>(T dictionary) where T : IDictionary<TKey, TValue> { ... }
面白いのは、TKeyとTValueがTから推論できるということです。メソッドのどこにでも必要はありません。だから私はジェネリック署名をよりきれいにすることを望んでいました。 –
@AmirAbiri - 代わりに 'T'を非総称' IDictionary'に制限できますか? – Lee
実際には、例を単純化するためにIDictionaryを使用しました。私の実際のタイプは「BaseGameState >のサブクラス」です(つまり、Tはインターフェイスではありません。私自身の基本クラスです)。 –
いいえ、あなたはそれを行うことはできません。たぶん、あなたは
public IDictionary<TKey, TValue> DoSomething<TKey, TValue>(IDictionary<TKey, TValue> dictionary)
{
...
}
を使用することができますが、それはまだ終わっていないrosylin githubで問題があります。だから、今はできませんが、私はそれが比較的早くなると思います。
'public V DoSomething(IDictionary 辞書)これはあなたの意志ですか? –
oleksii
Amir Abiri、戻り値の型をパラメータ型 'T'と同じにしたいのはなぜですか?あなたはパラメータを返すつもりですか?おそらくその必要はありません。そしてもう一つの 'T'を簡単に作ることはできません。 'T:new()'にも制約を加えたくない場合を除きます。 –