2010-03-02 79 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> 
{ 
}