当我向具有可空属性的T4模板提供对象时,除非我明确写入<#= obj.Property ?? string.Empty #>
,否则为模板生成的ToStringWithCulture(object objectToConvert)
方法会抛出ArgumentNullException
,如果属性为null 。是否有任何整洁或优雅的方式来覆盖这种行为,以便我不必在我的模板上使用胡椒空值合并?
答案 0 :(得分:2)
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/
答案 1 :(得分:1)
Mnaoumov的解决方案。更改base template class
public string ToStringWithCulture(object objectToConvert)
{
if (objectToConvert == null)
return "";
...
}