c# - 类型的代表,或如何给笨拙的类型更好的名称

标签 c# types

在我正在从事的项目中,我经常使用复杂的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不同:您要引入一种新类型,它对反射,typeofis运算符等有影响。你,但在那里。

但是,在单个源文件中,可以使用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/

相关文章:

sql - Postgres 中的代数数据类型

java - 为什么不能在 Java 中将 float[] 转换为 double[]?

c# - 读取 xml 不返回任何内容

c# - 在 TextBlock 中运行秒表

c# - 共享点 2010 : field formulas

c# - 远程服务器返回错误 : (412) The condition specified using HTTP conditional header(s) is not met. 。

c# - 使用 Json.NET 从 JSON 文件获取数据并使用 T4 文本模板创建 c-sharp 文件

class - 通过给定的泛型类型 Scala 获取类的伴随对象

PHP: intval() 等价于数字 >= 2147483647

c++ - 是否可以在运行时选择 C++ 泛型类型参数?