c# - 代码生成器或 T4 模板,它们真的是邪恶的吗?

标签 c# generics code-generation t4

我听说有人说不应该使用代码生成器和 T4 模板。这背后的逻辑是,如果您使用生成器生成代码,那么有一种更好、更有效的方法可以通过泛型和模板构建代码。

虽然我有点同意上面的说法,但我还没有真正找到有效的方法来构建可以实例化自己的模板。换句话说,我永远做不到:

return new T();

此外,如果我想根据数据库值生成代码,我发现将 Microsoft.SqlServer.Management.SMO 与 T4 模板结合使用可以很好地生成大量代码,而无需复制/粘贴或使用 resharper。

我发现泛型的许多问题也是令我震惊的是有很多开发人员不理解它们。当我确实检查泛型的解决方案时,有时它会变得复杂,因为 C# 声明你不能做在我看来可能合乎逻辑的事情。

你有什么想法?您更喜欢构建生成器,还是更喜欢使用泛型?另外,泛型能走多远?我对泛型了解很多,但我总是会遇到一些陷阱和陷阱,这导致我求助于 T4 模板。

处理需要大量灵 active 的场景的更合适方法是什么?哦,作为这个问题的额外收获,关于 C# 和泛型的优秀资源有哪些?

最佳答案

你可以做 new T();如果你这样做

public class Meh<T>
  where T : new()
{
  public static T CreateOne()
  {
    return new T();
  }
}

至于代码生成器。我每天都用一个,没有任何问题。事实上,我现在正在使用一个:-)

泛型解决一个问题,代码生成器解决另一个问题。例如,使用 UML 编辑器创建业务模型,然后使用持久性代码生成类,就像我一直使用 this tool 所做的那样。泛型无法实现,因为每个持久化类都是完全不同的。

关于泛型的良好来源。最好的一定是Jon Skeet's book当然! :-)

关于c# - 代码生成器或 T4 模板,它们真的是邪恶的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/524295/

相关文章:

c# - 如何在不破坏MVVM约定的情况下在第三方控件上调用方法?

c# - 在有或没有 PLINQ 的情况下如何将其并行化?

c# - 泛型可以用来定义 C# 方法中的可选参数吗?

java - 如何创建一个整数 ArrayList?

java - 是否有运行时代理创建库支持保留代理类的注释?

c# - 为什么双击滚动条时会触发 DataGrid MouseDoubleClick 事件?

c# - 如何在运行时以编程方式更改 asp web 应用程序主题(不是页面)?

java - 帮助我理解这些泛型方法警告

c# - T4 预处理模板调试不起作用 - Visual Studio 2010 RTM

c# - 高效 key 生成类