2010-03-02 80 views
6

我見過很多答案,typedef問題在C#中,我曾經使用過的,所以我有:嵌套別名

using Foo = System.Collections.Generic.Queue<Bar>; 

,這工作得很好。我可以改變定義(特別是改變Bar => Zoo等),並且所有使用Foo的改變。大。

現在我想這個工作:

using Foo = System.Collections.Generic.Queue<Bar>; 
using FooMap = System.Collections.Generic.Dictionary<char, Foo>; 

但C#似乎並不喜歡Foo在第二行,即使我已經在第一個定義它。

有沒有辦法使用現有的別名作爲另一部分的一部分?

編輯:我使用VS2008

+0

TBH這看起來像一個bug – Codesleuth 2010-03-02 12:09:42

+0

與Codesleuth同意 - 如果foo是一個別名仍然失敗對於一個簡單的類型(如System.Int32),所以我猜這是一個編譯器錯誤。 – 2010-03-02 12:23:48

+1

@Codesleuth @丹,關心戴夫的回答評論? – quamrana 2010-03-02 12:36:02

回答

13

根據它看起來像答案是否定的標準。從Section 16.3.1,第6段:

1,其中 使用別名指令被寫入的順序具有 沒有意義,並且 由 使用-別名中引用的命名空間或類型名稱的分辨率指令不會受到使用別名指令本身的 或 中的其他使用指令本身或 立即包含編譯 單元或名稱空間主體的影響。

2在其它 即,一個 使用別名指示的命名空間或類型名稱,如果立即含有 編譯單元或命名體具有 沒有using指令解析爲 。

編輯:

我只注意到該版本在上面的鏈接是一個有點過時了。來自4th Edition中相應段落的文本更詳細,但仍禁止在別人中使用別名進行引用。它還包含一個使其明確的例子。

根據您的需求爲輸入您也許能像逃脫的確定範圍和強度:

class Foo : System.Collections.Generic.Queue<Bar> 
{ 
}