В этом примере я разбираюсь с кодом перед передачей в шаблон, я просто хотел убедиться, что я не пропустил некоторые уже встроенные функции stringtemplate.
using System;
using System.Linq;
using Antlr.StringTemplate;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace Tests
{
[TestClass]
public class RandomTests
{
[TestMethod]
public void has_a_table()
{
var users = new[] {
new { LastName = "Doe", FirstName = "John", Age = 30 },
new { LastName = "Smith", FirstName = "Bob", Age = 28 }
};
var columns = new[] {
new { Template = "$it.LastName$", Head = "Last Name" },
new { Template = "$it.FirstName$", Head = "First Name" }
};
var tableTemplate = @"
<table>
<thead>
<tr>
<th scope=""col"">Index</th>
$columns: { column |<th scope=""col"">$colum n.Head$</th>}$
</tr>
</thead>
<tbody>
$items:{ item |<tr$if(item.Stripe)$ class=""alt""$endif$><td>$i$</td>$item.Item:row()$</tr>}$
</tbody>
</table>
";
var rowTemplate = string.Join
(
"",
(from column in columns
select
"<td>" + column.Template + "</td>"
).ToArray()
);
var templates = new StringTemplateGroup("table-templator");
templates.DefineTemplate("table", tableTemplate);
templates.DefineTemplate("row", rowTemplate);
var template = templates.GetInstanceOf("table");
<em>var items = users
.Select((item, index) => new { Stripe = index % 2 == 0, Item = item })
.ToArray();</em>
template.SetAttribute("columns", columns);
template.SetAttribute("items", items);
var actual = template.ToString();
Assert.IsNotNull(actual);
}