长泛型集合类型的速记声明

6

我看了很多C#泛型代码示例,记得见过一个语法声明技巧,可以为长泛型字典类型创建另一种替代的简写类型。结合C#和C++使用时,它是这样的:

typedef MyIndex as Dictionary< MyKey, MyClass>;

这样就可以使用以下内容:
class Foo
{
    MyIndex _classCache = new MyIndex();
}

有人能提醒我哪个C#语言特性支持这个吗?


1
哇,这是我绝对不会做的事情。C#之所以没有宏,是有原因的。 - Chris Patterson
2个回答

12

这是另一种using指令的形式,用于定义别名。

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

namespace MyClassExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var instanceOfDictionaryStringInt = new MyClass();
        }
    }
}

谢谢Rob和其他人。下次我参加面试时,我会知道它被称为使用别名。现在答案已经嵌入到我的代码中了。 - camelCase
忘了说,我认为别名(using)应该在应用程序命名空间区域内声明。 - camelCase
我尝试在命名空间MyClassExample中声明它,并在另一个文件中使用"using MyClassExample",但别名"MyClass"未被识别? - Meryan
@Meryan,别名与其他using指令一样处理,并且作用域限定于它们出现的文件中(请参阅:https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/using-directive#remarks)。 - Rob

3
这是一个如何完成的示例。
using Test = System.Collections.Generic.Dictionary<int, string>;

namespace TestConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            Test myDictionary = new Test();
            myDictionary.Add(1, "One");
        }

    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接