3

你好; 我想生成 Js 文件以使用 js 文件中的最佳重载方法进行访问。我可以通过 T4 创建一个适当格式的 js 文件。但是我在 js 文件中的属性用逗号分隔。请看:http: //jsaction.codeplex.com/

JsActions.Categories = {

CategoriesByCategoryID: 函数 (CategoryID) {/// },

CategoriesByCategoryName: 函数(CategoryName) {/// },

CategoriesByDescription: 函数(Description) {/// },

CategoriesByPicture: 函数(图片) {/// } ,

}

往上看;最后一个逗号不能在这里。如何修改我的 t4 模板。我认为“string.Join Method”但我不能。

     <#@ template language="C#" Debug="true" #>

<#@ output extension=".js" #>
<#@ assembly name="System.Xml"#>
<#@ assembly name="Microsoft.SqlServer.Smo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" #>
<#@ assembly name="Microsoft.SqlServer.ConnectionInfo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" #>
<#@ assembly name="Microsoft.SqlServer.Management.Sdk.Sfc, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" #>
<#@ import namespace="Microsoft.SqlServer.Management.Smo" #>
<#@ import namespace="System.Collections.Generic" #>


JsActions.<#=tab.Name.ToString()#> ={
<#           foreach (Column col in tab.Columns)
            {#>
string[] myValues = new string[] { ... };
string csvString = string.Join(",", HOW TO JOIN BELOW ROW ?????????????????????????????????????????????????????????????????);

<#= tab.Name.ToString()#>By<#=col.Name#>: function (<#=col.Name#>) {///</param>
},

<#           }#>

}

<#  }}#>

请看:<#= tab.Name.ToString()#>By<#=col.Name#>: function (<#=col.Name#>) {/// },

我应该删除最后一个属性的逗号...如何?

4

2 回答 2

4

可能性 1(不带 string.Join):按索引遍历集合,仅在不是最后一个条目时才呈现逗号

    for(int i=0;i<tab.Columns.Count;i++)
    {
        <#= tab.Name.ToString() #>By<#=tab.Columns[i].Name#>: function (<#=tab.Columns[i].Name#>) 
        { ///<param> } <#= (i == tab.Columns.Count - 1) ? string.Empty : ", " #>
    }

可能性 2(使用 string.Join):使用辅助方法返回要通过 string.Join 方法连接的字符串的 IEnumerable。

IEnumerable<string> GetLines(...)
{
    var list = new List<string>();
    foreach(var col in tab.Columns)
    {
        list.Add(tab.Name.ToString() + "By" + col.Name + ": function(" + col.Name 
                 + ") { /// <param> }");
    }
    return list;
}

然后使用

JsActions.<#=tab.Name.ToString()#> = { 
    <#= string.Join(", ", GetLines(tab)) #> }...

希望有帮助...

于 2013-05-26T20:44:25.870 回答
1

一个更优雅的解决方案可能是创建一个 Join 方法,它接受一个分隔符和一个你可以像这样使用的动作:

<# myArray.Join(",", (arrayItem, separator) => { #>
  My item: <#= arrayItem #><#= separator#>
<# }); #>

你把<#=separator#>分隔符放在你想要的地方。它被您传入的分隔符替换,除了最后一个获得空字符串的项目。

您需要在某处声明以下扩展方法:

public static void Join<T>(this IEnumerable<T> e, string separator, Action<T, string> action)
{
    using (var t = e.GetEnumerator())
    {
        if (!t.MoveNext())
            return;
        for (;;)
        {
            T current = t.Current;
            bool last = !t.MoveNext();
            action(current, last ? "" : separator);
            if (last)
                break;
        }
    }
}
于 2015-10-26T17:52:55.207 回答