2011-07-23 5 views
1

C#ドキュメントでは、タイプをローカルスコープに持たせるためにusing指示を推奨しています。実際、私は次のようなことをすることができます:C#でパラメータ化された型エイリアスを定義することはできますか?

using DD = IDictionary<string,IDictionary<string,Blah>>; 

それはうまくいきます。そのようなタイプの同義語を表現する方法ではなく、すべての恐ろしく長い一般的な名前を繰り返すことで、あり

using DD<Blah... 
     ^; expected 

:しかし、私が行うことができるようにしたいと思います:

using DD<Blah> = IDictionary<string,IDictionary<string,Blah>> 

をしかし、コンパイラがで死にますどこか?私は読み取り専用のコレクションの出力形式に一般的な、再帰的なラッパーを記述することが可能であったかどうかを知りたいと思った

コンテキスト

。次のインターフェイス

interface IIndexable<in In, out Out> { Out this[In idx] { get; }} 

で、私は私は本当にHaskellの型クラスFunctorの利便性をエミュレートしようとしていると思います

IIndexable<Key,VOut> map(IIndexable<Key,VIn> coll, Func<VIn, VOut> f) 

を書くことができました。

したがって、私の複合型をカスタムクラスにラップすると、それは、map()のスタックからアセンブルされ、カスタムラッパークラスに置き換えるための単一のnew呼び出しがありません。

答えて

3

悲しいことに、それぞれのBlahタイプのエイリアスを定義する必要があります(この例では)。

同様:

using DB = IDictionary<string,IDictionary<string,Blah>>; 
using DG = IDictionary<string,IDictionary<string,Gah>>; 

私が知っている、ちょっとイライラ。

しかし、私はあなた本当には、あなたがそのようなデータ構造をネストしているとき、それは聞いて良い時間です。最初の場所でIDictionary<string, IDictionary<string, Blah>>として入力変数を扱うのコードをしたいかどうかを検討することをお勧めしますあなた自身があなたの頭痛を与えずに、あなたが望むことをやり遂げることを容易にするカスタムクラスにそのいくつかをカプセル化する必要があるかどうかを自分で判断してください。そのようなクラスは、この場合、続行します。)

+0

ありがとう。私は達成しようとしていることについてより多くの文脈を提供するために質問を展開します、おそらくそれは明らかになります! – b0fh

3

少なくとも可読性のためにIDictionary<string, Blah>に独自のタイプを導入する方がよいでしょう。

最も簡単なclass MyDic : Dictionary<string, Blah> {}が表示されます。そしてあなたはエイリアスと長い名前の自由です。ただIDictionary<string, MyDic>

ご質問に正確に回答する場合は、いいえ、C#ではエイリアスを完全修飾する必要があります。

+0

上記のものとほぼ同時だったので、答えを出してくれてありがとう! – b0fh

+0

ありがとう:) P.S.実際には私の答えは3秒速かった:D –

関連する問題