当使用T4生成C#代码时,我无法通过散布的TABS获得正确的标识:
public partial class Foo : Base
{
public int C { get; set; }
[MappedProperty("A.B[{C}].Foo")]
public int Foo { get; set; }
}
我正在使用看似正确缩进的.TT代码,类似于以下内容:
public partial class <#= ViewModelName #>
{
<# foreach(var property in ViewModelProperties) { #>
<# if(property.Mapping != null) { #>
[MappedProperty("<#= property.Mapping #>")]
<# } #>
public <#= property.TypeDeclaration #> <#= property.MemberName #> { get; set; }
<# } #>
}
此代码段反映了我已尝试过的操作:尽可能将控制语句和块设置为单行。
答案 0 :(得分:8)
我喜欢这样做,从来没有遇到任何问题。
public partial class <#= ViewModelName #>
{
<#
foreach(var property in ViewModelProperties) {
if(property.Mapping != null) {
#>
[MappedProperty("<#= property.Mapping #>")]
<#
}
#>
public <#= property.TypeDeclaration #> <#= property.MemberName #> { get; set; }
<#
}
#>
}
答案 1 :(得分:2)
使用PushIndent()
,PopIndent()
和ClearIndent()
,如下所示:
SELECT p.app_id,
COUNT(CASE WHEN p.active=1 THEN 1 END) AS active_users_count,
COUNT(CASE WHEN DATE(p.created_date)= CURDATE() THEN 1 END) AS today_install_count,
COUNT(CASE WHEN DATE(p.created_date) = DATE(DATE_SUB(NOW(),INTERVAL 1 DAY)) THEN 1 END) AS yesterday_install_count,
COUNT(CASE WHEN DATE(p.created_date) BETWEEN DATE_SUB(CURDATE(),INTERVAL DAY(LAST_DAY(NOW())) DAY) AND CURDATE() THEN 1 END) AS month_install_count,
COUNT(CASE WHEN DATE(p.created_date) BETWEEN DATE_SUB(CURDATE(),INTERVAL 1 YEAR) AND CURDATE() THEN 1 END) AS year_install_count,
COUNT(CASE WHEN DATE(p.created_date) BETWEEN DATE_SUB(CURDATE(),INTERVAL 7 DAY) AND CURDATE() THEN 1 END) AS week_install_count,
COUNT('x') AS total_users_count
FROM person p
INNER JOIN project p2 ON p.app_id = p2.id
GROUP BY p.app_id
或者......
public partial class <#= ViewModelName #>
{
<# PushIndent(" "); #>
<# foreach(var property in ViewModelProperties) { #>
<# if(property.Mapping != null) { #>
[MappedProperty("<#= property.Mapping #>")]
<# } #>
public <#= property.TypeDeclaration #> <#= property.MemberName #> { get; set; }
<# } #>
<# PopIndent(); #>
}
答案 2 :(得分:1)
你需要对你的空白并不那么凌乱,并且&#39;&lt;#&#39;结果将更加可取:
你不需要使用&#39;&lt;#&#39;在一半的地方,foreach
和if
可能会保持在一个地方。这样你就可以减少标签之外的潜在空白,使其更具可读性。
您的public
行以双标签开头,因此它会生成一个缩进的属性,其中包含双标签而不是单个标签。删除一个。
外面的所有空格&#39;&lt;#&#39;标签将被打印,删除它们,只留下标签之外的必要内容(在它们之前和之后)。否则他们会积累并破坏你的格式。