C# 如何使用文本模板?

C# 如何使用文本模板?,c#,C#,我有一个页眉和页脚文本文件,对于所有用例,这两个文件都是长的和不变的。我不想在代码中声明它,也不想在运行时读取它们 const string header = "some very long text in header"; const string footer = "some very long text in footer"; string content = "my CONTENT"; StringBuilder sb = new StringBuilder(); sb.Append

我有一个页眉和页脚文本文件,对于所有用例,这两个文件都是长的和不变的。我不想在代码中声明它,也不想在运行时读取它们

const string header = "some very long text in header";
const string footer = "some very long text in footer";
string content = "my CONTENT"; 

StringBuilder sb = new StringBuilder();
sb.Append(header);
sb.Append(content);
sb.Append(footer);

var allText = sb.toString(); // all text here
我是否可以使用一些文本模板?然后生成所有信息,比如HTML中的胡子模板引擎

示例:
template.txt

some very long text in header

<%= content %>

some very long text in footer

我建议为此使用
Razor视图引擎

此引擎不限于处理HTML文件。它可以用于所有文本文件。

您可以尝试使用Linq:

编辑:如果在一个文件中同时包含页眉和页脚(这不是一个好做法),则可以使用
Select()
。例如,如果
标记了内容应更改的行:

  var lines = File
    .ReadLines(@"C:\HeaderAndFooter.txt")
    .Select(line => line == "<%= content %>" ? "MyContent" : line);
  ...
  var allText = String.Join(Environment.NewLine, 
      lines);
var行=文件
.ReadLines(@“C:\HeaderAndFooter.txt”)
.选择(行=>行==“”?“MyContent”:行);
...
var allText=String.Join(Environment.NewLine,
线路);

如果您想创建模板,您可以使用
Antlr4.StringTemplate
哪个essential可以满足您的需要,默认情况下它使用“”或“$”作为分隔符

这是一个简洁的解决方案,如果我只想将页眉和页脚放在一个文件中,我该怎么做?按照@CSharper?@Tim的建议使用视图引擎:在这种情况下,您可以稍微修改Linq,例如使用
Select()
,请参见我的编辑。
var header = File
  .ReadLines(@"C:\MyHeader.txt");

var footer = File
  .ReadLines(@"C:\MyFooter.txt");

var lines = header
  .Concat(new String[] {"My Content"})
  .Concat(footer);

...

var allText = String.Join(Environment.NewLine, 
  lines);
  var lines = File
    .ReadLines(@"C:\HeaderAndFooter.txt")
    .Select(line => line == "<%= content %>" ? "MyContent" : line);
  ...
  var allText = String.Join(Environment.NewLine, 
      lines);