C#中的嵌套别名

问题描述 投票:11回答:2

我已经使用过很多关于C#中typedef问题的答案,所以我有:

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

c# alias typedef
2个回答
16
投票

1using-alias-directives写有没有意义,而且决议引用的名称空间或类型名称使用别名指令不受影响通过使用别名指令本身或由其他使用指令立即包含编译单元或名称空间主体。

2在其他单词,一个的名称空间或类型名称using-alias-directive解析为如果直接包含编译单元或名称空间主体具有没有使用指令。

编辑:

我刚刚注意到上面链接的版本有点过时了。 4th Edition中相应段落的文本更详细,但仍禁止使用其他别名进行引用。它还包含一个使这一点明确的示例。

根据您对范围界定和打字强度的需求,您可能可以摆脱类似的情况:

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


0
投票
----- cs-file ----- using System; (and others if needed) using Foo = System.Collections.Generic.Queue<Bar>; namespace my_software { using FooMap = System.Collections.Generic.Dictionary<char, Foo>; your usual code } ----- file end -----

您的代码然后可能会嵌套在一个额外的namepspace中,仅出于这个单一目的,这将不是很好。

© www.soinside.com 2019 - 2024. All rights reserved.