C#宏样式泛型

| 我正在寻找一种具有泛型的方法,该泛型仅在编译时存在,以用于代码重用:不必复制/粘贴类和方法。基本上像宏一样,只需进行文本替换,并进行一些类型检查。更像C ++模板。 我问的原因: 普通的C#泛型坚持要始终在运行时创建泛型类型(为什么?), 1)不仅会造成不必要的限制(例如,不能从类型参数继承,这将非常有用), 2)但是这些运行时泛型类型现在对我来说造成了问题,因为.NET无法序列化它们,因此,当我将它们插入RichTextBox时,许多操作会失败或抛出“无法序列化泛型类型”异常。一切都在使用非泛型类型,但是我想使代码更通用以添加东西,因此我添加了泛型(C#泛型继承解决方法),它们破坏了一切。 谢谢。     
已邀请:
尽管C#没有C ++样式的模板,但是您可以尝试使用T4(文本模板转换工具包)来模仿它们。 您的文件如下所示:
<#@ template language=\"C#\" #>
<#@ output extension=\".cs\" #>
<#
    foreach (var T in new[]{\"instantiate\",\"for\",\"these\",\"types\"})
    {
#>      

class FakeGeneric<#=T#>
{
    <#=T#> FakeGenericField;
}

<#  } #> 
这将生成如下类型:
class FakeGenericinstantiate
{
    instantiate FakeGenericField;
}

class FakeGenericfor
{
    for FakeGenericField;
}

// etc
在MSDN上有一个有关使用T4生成这样的代码的页面。     
它们被称为模板(不是“宏样式泛型”),并且在C#中不存在。 如果有兴趣的话,看看D;它具有许多模板元编程功能,比C ++或C#更多(并且IMO更好)。     

要回复问题请先登录注册