在我正在从事的项目中,我经常使用复杂的Dictionary
对象。通常,有很多声明,例如:
var d1 = new Dictionary<string, Dictionary<int, List<string>>>();
var d2 = new Dictionary<Tuple<string, string>, List<object>>();
在类型转换和传递参数之间,以及其他什么之间,这变得很烦人。我想做的是使用虚构的关键字“ typedel”进行如下操作:
typedel ListDict = Dictionary<string, Dictionary<int, List<string>>>();
typedel PolyDict = Dictionary<Tuple<string, string>, List<object>>();
var d1 = new ListDict();
var d2 = new PolyDict();
这样我就不必每次都键入长的
Dictionary
声明-所以我想要的是定义类型名称的缩写形式。如何以最简单的方式(使用最少的代码行)执行此操作?
最佳答案
对于要大量使用的“ typedef”,您可以创建一个从适当的基类派生的类,如@Ed S的答案:
class MyData : Dictionary<string, Dictionary<int, List<string>>>
{
}
但是,这与大多数人认为的typedef不同:您要引入一种新类型,它对反射,
typeof
,is
运算符等有影响。你,但在那里。但是,在单个源文件中,可以使用
using
子句的第二种形式进行实际的typedef:using ListDict = Dictionary<string, Dictionary<int, List<string>>>();
using PolyDict = Dictionary<Tuple<string, string>, List<object>>();
无论哪种情况,虽然使用“ typedef”肯定会节省您的键入时间,但不要轻视看到在代码中明确说明的类型的好处。这就是为什么类似this blog post之类的文章建议在自定义
List<Foo>
上使用FooCollection : List<Foo>
的原因相同-使用显式通用版本,您知道它是什么类型的集合,它公开了什么方法。
关于c# - 类型的代表,或如何给笨拙的类型更好的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11679983/