泛型

C#中的泛型一直支持到运行时:使用 C#构建的泛型类型即使在编译为 CIL 之后也会保留其通用语义。

这实际上意味着,在 C#中,可以反映泛型类型并在声明它们时查看它们,或者检查对象是否是泛型类型的实例。这与类型擦除形成对比,类型擦除在编译期间删除泛型类型信息。它也与泛型的模板方法形成对比,其中多个具体泛型类型在运行时变为多个非泛型类型,并且进一步实例化原始泛型类型定义所需的任何元数据都将丢失。

但是,在反映泛型类型时要小心:泛型类型的名称将在编译时被更改,用反引号替换有角度的括号和类型参数的名称,后跟通用类型参数的数量。因此,Dictionary<TKey, Tvalue> 将被翻译为Dictionary`2