.net - T4 模板 : any way to make ToStringWithCulture() convert null to string. 空而不是抛出异常?

标签 .net visual-studio-2013 t4

当我向具有可为空属性的 T4 模板提供对象时,除非我明确写入 <#= obj.Property ?? string.Empty #> ToStringWithCulture(object objectToConvert)为模板生成的方法抛出 ArgumentNullException如果该属性为空。是否有任何简洁或优雅的方法来覆盖此行为,以便我不必在我的模板中使用 null 合并?

最佳答案

劳埃德的回答基本正确但不完整。即使在编辑模板后,您也必须覆盖基模板类以使更改保持不变。就是这样:

  • 为模板创建一个新的基类,例如 TemplateBase.cs
  • 将当前自动生成的模板基类的内容复制到 TemplateBase.cs .自动生成的基类可以在 Visual Studio 中的 .tt 模板下找到。它叫YourTemplateBase它包含(除其他外)public class ToStringInstanceHelper问题中提到。
  • 将以下声明添加到 TemplateBase.cs :
    /// <summary>
    /// Required to make this class a base class for T4 templates
    /// </summary>
    public abstract string TransformText();
    
  • YourTemplate.tt 中添加基本模板声明:
    <#@ template language="C#" Inherits="TemplateBase" #>
    

    进行此更改后,您的模板将不再生成基类。
  • ToStringInstanceHelper 中进行以下编辑嵌套在里面 TemplateBase.cs :
    public string ToStringWithCulture(object objectToConvert)
    {
        if (objectToConvert == null)
            return "";
        ...
    }
    

  • 归功于 mnaoumov:https://mnaoumov.wordpress.com/2012/09/27/t4-runtime-templates-base-class/

    关于.net - T4 模板 : any way to make ToStringWithCulture() convert null to string. 空而不是抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30241543/

    相关文章:

    c# - 将一个字节转换为 8 位,并带有 true 或 false 标志

    c# - ASP Repeater 没有以正确的顺序显示数据

    visual-studio-2013 - 如何自动备份Visual Studio项目?

    c# - Entity Framework 文件未嵌套在 EDMX 文件下

    c# - T4 - 字段初始值设定项不能引用非静态字段、方法或属性

    c# - 从 Visual Studio 添加 Dll 到 Subversion

    c# - x64 上的文件时间

    ios - 如何使用 SDK 版本 5.0 部署 xamarin ios 应用程序以在 visual studio 2013 中使用旧主题(不是 iOS 7 主题)

    visual-studio - 为什么 Visual Studio 会在项目文件中留下一个空的 ItemGroup 节点?

    c# - 在 T4 模板中使用 .NET Core 程序集