2011-07-23 133 views
1

C#文檔建議使用using指令將類型帶入本地作用域。事實上,我可以這樣做:是否可以在C#中定義參數化類型別名?

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

它工作正常。不過,我想能夠做到:

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

但是,編譯去世,享年:

using DD<Blah... 
     ^; expected 

有沒有表達這種類型的代名詞的方式,而不是所有重複窘況長通用名稱在那個地方?

語境

我想知道是否有可能寫在只讀集合的​​輸出類型的通用,遞歸包裝。用下面的接口

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

我設法寫

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

我想我真的試圖仿效Haskell的類型類Functor的便利。

因此,將我的複雜類型包裝在自定義類中不會削減它,因爲它是從一堆map() s組裝而成的,並且沒有單個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

謝謝:)事實上,我的答案快了3秒鐘:D –

相關問題