【问题标题】:T4 templates: any way to make ToStringWithCulture() convert null to string.Empty instead of throwing exception?T4 模板:有什么方法可以让 ToStringWithCulture() 将 null 转换为 string.Empty 而不是抛出异常?
【发布时间】:2015-05-14 15:43:44
【问题描述】:

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

【问题讨论】:

    标签: .net visual-studio-2013 t4


    【解决方案1】:

    劳埃德的回答基本正确但不完整。即使在您编辑模板后,您也必须覆盖基模板类以使更改持续存在。方法如下:

    1. 为模板创建一个新的基类,例如TemplateBase.cs
    2. 将当前自动生成的模板基类的内容复制到TemplateBase.cs。可以在 Visual Studio 中的 .tt 模板下找到自动生成的基类。它被称为YourTemplateBase,它包含(除其他外)问题中提到的public class ToStringInstanceHelper

    3. 将以下声明添加到TemplateBase.cs

      /// <summary>
      /// Required to make this class a base class for T4 templates
      /// </summary>
      public abstract string TransformText();
      
    4. YourTemplate.tt中添加基本模板声明:

      <#@ template language="C#" Inherits="TemplateBase" #>
      

      此更改后,您的模板将不再生成基类。

    5. 在嵌套在TemplateBase.cs 中的ToStringInstanceHelper 中进行以下编辑:

      public string ToStringWithCulture(object objectToConvert)
      {
          if (objectToConvert == null)
              return "";
          ...
      }
      

    感谢 mnaoumov:https://mnaoumov.wordpress.com/2012/09/27/t4-runtime-templates-base-class/

    【讨论】:

      【解决方案2】:

      Mnaoumov 的解决方案。更改base template class

      public string ToStringWithCulture(object objectToConvert)
      {
          if (objectToConvert == null)
              return "";
          ...
      }
      

      【讨论】:

      • 每次编辑模板时都会重新生成基类。
      猜你喜欢
      • 2021-04-17
      • 2019-01-25
      • 1970-01-01
      • 2013-02-11
      • 1970-01-01
      • 2014-11-15
      • 2010-10-05
      • 1970-01-01
      • 2021-09-25
      相关资源
      最近更新 更多