关于使用using关键字缩写泛型类型对象定义的疑问
泛型类型的using别名用法解答
嗨,刚接触C#就想到这个问题,说明你对语法细节挺敏感的嘛!其实从C# 7.3版本开始,就支持给泛型类型创建using别名了,完全能实现你想要的类似泛型typedef的效果😎
基本用法示例
直接在文件顶部或者命名空间级别声明泛型别名,写法如下:
// 给泛型Dictionary起个短别名 using MyGenericDict<TKey, TValue> = System.Collections.Generic.Dictionary<TKey, TValue>;
之后你就可以像使用原生泛型类型一样用这个别名创建实例:
// 创建字符串键、整数值的字典 var fruitCount = new MyGenericDict<string, int>(); fruitCount.Add("banana", 3); // 创建整数键、布尔值的字典 var flagMap = new MyGenericDict<int, bool>(); flagMap.Add(0, false);
带约束的泛型别名
如果你的泛型类型需要参数约束,也可以直接在别名声明里加上,这样使用别名时会自动继承这些约束:
// 给带约束的泛型字典起别名 using MyConstrainedDict<TKey, TValue> = System.Collections.Generic.Dictionary<TKey, TValue> where TKey : IComparable<TKey> // 约束键类型必须实现IComparable where TValue : class; // 约束值类型必须是引用类型
注意事项
- 泛型别名的声明必须放在文件顶部(任何命名空间之外)或者命名空间内部,不能放在类、方法等成员内部
- 别名的泛型参数名称可以自定义,不一定和原类型的参数名一致,比如你也可以写成
using MyDict<K, V> = System.Collections.Generic.Dictionary<K, V>,只要对应上就行
内容的提问来源于stack exchange,提问作者J. Arrillaga
相关产品推荐
相关产品推荐

