为什么一个别名的C#Type不能被另一个访问?

Joh*_*n K 3 .net c# alias

好东西

// ok to alias a List Type
using AliasStringList = System.Collections.Generic.List<string>;

// and ok to alias a List of Lists like this
using AliasListOfStringList1 = System.Collections.Generic.List<System.Collections.Generic.List<string>>;
Run Code Online (Sandbox Code Playgroud)

坏的东西

// However **error** to alias another alias
using AliasListOfStringList2 = System.Collections.Generic.List<AliasStringList>;
Run Code Online (Sandbox Code Playgroud)

产生编译错误

找不到类型或命名空间名称'AliasStringList'(您是否缺少using指令或程序集引用?)

注意:这是using指令而不是using语句.

Nic*_*ver 8

你只是不能使用在另一个使用中使用的别名声明的别名.对于像您一样的一组使用,您可以假设使用声明的兄弟不存在.

来自MSDN

写入using-alias-directives的顺序没有意义,using-alias-directive引用的namespace-or-type-name的解析不受using-alias-directive本身或其他使用的影响-立即包含编译单元或命名空间体中的指令.换句话说,该空间或类型名称一个的使用别名指示仿佛直接包含编译单元或命名空间体没有using指令解析

它提供了您确切问题的简化示例,这是预期的行为:

namespace N1.N2 {}
namespace N3
{
   using R1 = N1;         // OK
   using R2 = N1.N2;      // OK
   using R3 = R1.N2;      // Error, R1 unknown
}
Run Code Online (Sandbox Code Playgroud)

  • @Michael:我们希望确保您能够使用指令任意重新排序,而不会在程序中引入语义更改. (4认同)