Sem*_*ike 4 c# generics macros templates
我正在寻找一种方法来拥有仅在编译时存在的泛型,以便代码重用:不必复制/粘贴类和方法。基本上只是文本替换,就像宏一样,带有一些类型检查。更像是 C++ 模板。
我问的原因:
普通的 C# 泛型坚持总是在运行时创建泛型类型(为什么??),
1) 不仅会产生不必要的限制(例如不能从类型参数继承,这将非常有用),
2) 但是这些运行时泛型类型现在给我带来了问题,因为 .NET 无法序列化它们,所以当我将它们插入 RichTextBox 时,许多操作要么失败,要么抛出“无法序列化泛型类型”异常。一切都在使用非泛型类型,但我想让代码更通用以添加内容,因此我添加了泛型(C# Generic Inheritance 解决方法),但它们破坏了一切。
谢谢。
虽然 C# 没有 C++ 样式的模板,但您可以尝试使用T4(文本模板转换工具包)来模仿它们。
您的文件将类似于:
<#@ template language="C#" #>
<#@ output extension=".cs" #>
<#
foreach (var T in new[]{"instantiate","for","these","types"})
{
#>
class FakeGeneric<#=T#>
{
<#=T#> FakeGenericField;
}
<# } #>
Run Code Online (Sandbox Code Playgroud)
这将生成如下类型:
class FakeGenericinstantiate
{
instantiate FakeGenericField;
}
class FakeGenericfor
{
for FakeGenericField;
}
// etc
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1325 次 |
| 最近记录: |