在C#中别名多个类

RUs*_*512 9 c# alias templates

我想(我想)让我的代码更具可读性.我一直在使用以下类别名.

using Histogram = EmpiricScore<int>;
using FeatureHistogram = Dictionary<string, EmpiricScore<int>>;
Run Code Online (Sandbox Code Playgroud)

但我认为(注意:我试图FeatureHistogramHistogram这里来描述,而不是EmpiricScore<int>>):

using Histogram = EmpiricScore<int>;
using FeatureHistogram = Dictionary<string, Histogram>;
Run Code Online (Sandbox Code Playgroud)

似乎更具可读性(依赖关系可以更深入,如果我创建一个Hierarchical特征直方图怎么办),并且更容易重新分解(如果我碰巧决定名称直方图是不幸的).但编译器不会这样做.为什么?有什么方法可以绕过这个?

创建新类似乎有点矫枉过正......

ASh*_*ASh 4

但编译器不会这样做。为什么 ?

根据 C# 规范 9.4.1,编译器不会执行此操作:

Ausing-alias-directive引入了一个标识符,该标识符充当直接封闭的编译单元或命名空间主体中的命名空间或类型的别名。

using-alias-directive:
using   identifier   =   namespace-or-type-name   ;
Run Code Online (Sandbox Code Playgroud)

写入的顺序using-alias-directives并不重要,并且namespace-or-type-namea 引用的解析using-alias-directive不受其本身或直接包含的编译单元或命名空间主体中的using-alias-directive其他内容的影响。using-directives

换句话说,namespace-or-type-namea 的using-alias-directive解析就像直接包含的编译单元或命名空间主体没有 using 指令一样。

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

选项: 1.按照M.kazem Akhgary评论中的建议,定义新的命名空间

演示

using Histogram = System.Collections.Generic.List<int>;

namespace TEST
{
    using FeatureHistogram = System.Collections.Generic.Dictionary<string, Histogram>;

    public class Program
    {    
        public static void Main()
        {
            var x = new Histogram();
            Console.WriteLine(x.GetType());

            var y = new FeatureHistogram();
            Console.WriteLine(y.GetType());
        }   
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. 创建更深层次的依赖关系的类