有没有办法缩写自定义类类型声明?

时间:2014-02-24 01:06:59

标签: c#

有没有办法为:

创建缩写或自定义类名
Dictionary<string,Dictionary<int,myClass>>

我可以创建

class DD
{
   public Dictionary<string,Dictionary<int,myClass>> wDD;
}

但是当我使用它时我不得不说:

DD.wDD wrkVar = new DD.wDD();

而不是

DD wrkVar = new DD();

有没有办法让DD直接引用

Dictionary<string,Dictionary<int,myClass>>

编辑 - 根据以下回复显示解决方案

我到达了这个,有效:

using DBDDict = 
System.Collections.Generic.Dictionary<string,    
System.Collections.Generic.Dictionary<int, DDRow>>;

public class CustomClassTest
{
    public static void Test4()
    {
        DDRow wrkRow = new DDRow();
        wrkRow.ColumnName = "ABC";
        Dictionary<int, DDRow> wrkRowD = new Dictionary<int, DDRow>();
        wrkRowD.Add(1, wrkRow);
        DBDDict wrkDD = new DBDDict();
        wrkDD.Add("key", wrkRowD);

    }
}

AND,这样做也更容易使用(注意“使用”已被注释掉)。

//using DBDDict = System.Collections.Generic.Dictionary<string, System.Collections.Generic.Dictionary<int, DDRow>>;

    public class DD : Dictionary<string, Dictionary<int, DDRow>> {}

    public class CustomClassTest
    {

        public static void Test4()
        {
            DDRow wrkRow = new DDRow();
            wrkRow.ColumnName = "ABC";
            Dictionary<int, DDRow> wrkRowD = new Dictionary<int, DDRow>();
            wrkRowD.Add(1, wrkRow);
            DD wrkDD = new DD();
            wrkDD.Add("key", wrkRowD);
        }
    }

4 个答案:

答案 0 :(得分:5)

您可以在源文件中创建一个别名,如下所示:

using FancyDic = System.Collections.Generic.Dictionary<string,System.Collections.Generic.Dictionary<int,myClass>>;

但是,必须在要使用'FancyDic'别名的每个代码文件中重复这一过。

虽然声明了这个,但您可以按如下方式创建新对象:

 var newDic = new FancyDic();

答案 1 :(得分:4)

您可以在名称空间外使用名为using alias directiveusing语句使用别名,通常在每个文件中使用声明放置:

using System; // etc.
using DD = System.Collections.Generic.Dictionary<string, System.Collections.Generic.Dictionary<int, MyNameSpace.MyClass>>;

然后进行实例化,

public void SomeVoid()
{
    var dd = new DD();
}

变量dd现在正是您设置using别名的原因: enter image description here

  • 优点:无需为代码设计目的创建单独的类。
  • 缺点:需要在每个要使用此文件的文件中重复using alias directive

答案 2 :(得分:1)

继承您正在“别名”的类型

public class DD : Dictionary<string,Dictionary<int,myClass>>  { }

答案 3 :(得分:0)

不,没有办法“缩短”班级宣言和BTW,这......

Dictionary<string,<Dictionary<int,myClass>>

无法编译,您需要将其更改为...

Dictionary<string,Dictionary<int,myClass>>

此外,这......

DD.wDD wrkVar = new DD.wDD();

将无法编译,因为无法使用构造函数语法调用wDD公共字段。此,

DD wrkVar = new DD();
wrkVar.wDD;

是访问该公共字段的正确方法。您可以通过继承该字典来“缩短”类实例化而不是类声明...

public class DD : Dictionary<string,Dictionary<int,myClass>>
{
}

DD d = new DD();
d.Add("key", new Dictionary<int,myClass>());