Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C语言中嵌套别名#_C#_Alias_Typedef - Fatal编程技术网

C# 在C语言中嵌套别名#

C# 在C语言中嵌套别名#,c#,alias,typedef,C#,Alias,Typedef,对于C#中的typedef问题,我已经看到了很多答案,我已经使用了这些答案,因此我有: using Foo = System.Collections.Generic.Queue<Bar>; 使用Foo=System.Collections.Generic.Queue; 这很有效。我可以更改定义(特别是更改栏=>Zoo等),使用Foo的所有内容都会更改。太好了 现在我想让它起作用: using Foo = System.Collections.Generic.Queue<Ba

对于C#中的
typedef
问题,我已经看到了很多答案,我已经使用了这些答案,因此我有:

using Foo = System.Collections.Generic.Queue<Bar>;
使用Foo=System.Collections.Generic.Queue;
这很有效。我可以更改定义(特别是更改栏=>Zoo等),使用Foo的所有内容都会更改。太好了

现在我想让它起作用:

using Foo = System.Collections.Generic.Queue<Bar>;
using FooMap = System.Collections.Generic.Dictionary<char, Foo>;
使用Foo=System.Collections.Generic.Queue;
使用FooMap=System.Collections.Generic.Dictionary;
但是C#似乎不喜欢第二行中的
Foo
,尽管我在第一行中定义了它

有没有办法将现有别名用作另一个别名的一部分


编辑:根据标准,我使用的是VS2008,答案似乎是否定的。第6段:

(一)发生的顺序 使用别名编写的指令具有 没有意义,并且解决了这个问题 名称空间引用的名称空间或类型名称 使用alias指令不受影响 通过使用别名指令本身或 通过在 立即包含编译 单元或命名空间主体

2其他 Word的命名空间或类型名称 使用alias指令解析为 如果立即包含 编译单元或命名空间主体已被删除 禁止使用指令

编辑:

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

根据您对范围和打字强度的需求,您可能可以通过以下方式摆脱:

class Foo : System.Collections.Generic.Queue<Bar>
{
}
class Foo:System.Collections.Generic.Queue
{
}
在放置
使用Foo=System.Collections.Generic.Queue

使用FooMap=System.Collections.Generic.Dictionary
在不同的名称空间中,在您的情况下可能是

----- 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 -----
----cs文件-----
使用制度;(如有需要,可提供其他服务)
使用Foo=System.Collections.Generic.Queue;
名称空间my_软件
{
使用FooMap=System.Collections.Generic.Dictionary;
你通常的代码
}
-----文件结束-----

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

同意Codesleuth-如果Foo是简单类型(如System.Int32)的别名,它仍然会失败,所以我猜这是一个编译器错误。@Codesleuth@Dan,是否对Dave的答案发表评论?