どのようなC#5.0でのオプションのジェネリック型パラメータについてはどうですか? [閉まっている]
質問
ただ、考えています。
でしょう、C#?
で、オプションの型パラメータを持つことが有用ではありませんこれは、人生をより簡単になるだろう。私は、同じ名前を持つ複数のクラスが、異なるタイプのパラメータを持つの疲れ。また、VSは非常にVellの(ファイル名)これをサポートしていません: - )
これは、例えば非ジェネリックのIEnumerableの必要性を排除します。
interface IEnumerable<out T=object>{
IEnumerator<T> GetEnumerator()
}
あなたはどう思いますか?
解決
私はそれのために間違いなく思います。
私は現在、私はクラスの異なるメンバーとメソッドへの参照を渡したいの異なるシナリオのためのヘルパーメソッドを書いています。これを実現するために、私は例えば、取って、(私はこのように強く型付けされたすべてのものを保ち、ラムダ式とメソッドに到達することができます)ヘルパーへの引数としてExpression<Func<TIn, TOut>>
ます。
しかし - 私は現在、私はそれにジェネリック引数の異なる量を持っている必要があるため、入力引数のそれぞれ異なる数の新しいヘルパーメソッドを定義する必要があります。代わりの
HelperMethod<TIn>(Expression<Action<TIn>> arg) // Yes, C# can distinguish
HelperMethod<TOut>(Expression<Func<TOut>> arg) // these two from eachother
HelperMethod<TIn, TOut>(Expression<Func<TIn, TOut>> arg)
HelperMethod<TIn1, TIn2, TOut>(Expression<Func<TIn1, TIn2, TOut>> arg)
// etc
私はほとんど、二つの方法で、で間に合わせることができ
HelperMethod<TIn>(Expression<Action<TIn>> arg)
HelperMethod<TOut, TIn1 = DummyType, ...>(Expression<Func<TIn1, ..., TOut> arg)
私の場合、それは多くのコードを回避する重複...
他のヒント
何がこの言語の機能の主な使用でしょうか?私はそれがファイル名と少ないタイピングなどのようないくつかの管理タスクを助けることができるが、それを超えて、私は、これは可能だろうか便利表示されていないことを確認することができます。
また、この機能は大幅にジェネリック型パラメータに配置することができ、デフォルトの種類自体は一般的な制約自体の一種として機能しなければならない任意の汎用制約が複雑になる。
私は、これは開発者に任意の真のメリットを提供することなく、言語が複雑になると思います。
それはあなたが提案している、まさに私にははっきりしていません。現在のところ、同じ名前で異なる型パラメータを持つタイプかもしれないが、これは、継承によってどのような方法で関連していない - ?あなたの提案が、その後どうなるのか。
インタフェースが導入されたとき、CLRがジェネリックをサポートしていなかったので、それが唯一の存在、および汎用インタフェース - 基本クラスライブラリは、ゼロから再設計された場合は、はさらに、ほぼ確実にそこには非ジェネリックIEnumerableインターフェイスないだろうそれから継承だけので、レガシーコードは引き続き動作します。その問題は、もはや関連しているので、新たに宣言されたクラスは、サポートジェネリックを行いCLR用に作成されませんされています。
私は最近だけでなく、かなり、このようなものを使用している可能性がケースに出くわしました。 Iは、クラスA及びその関連クラスAChild、クラスBおよびクラスBChild間行う種類の形質転換を、その方法を持っていました。通常、一対のA / AChildはB / BChildと同じであったが、時にはAはBChildの基底クラスBとAChildのベースクラスであった。
これは、TBパラメータ私のタイプは、TAにデフォルト設定と言うことができるようによかった、とTBChildはTAChildにデフォルト設定ことでしょう。
これは、推論が働かないよう、型パラメータを記述する必要があったような状況だったことです。注意