如何实现参数化字符串?

时间:2012-11-07 22:03:55

标签: .net string parameterized

我的应用需要允许用户输入和保存通用参数化字符串。

在.NET中执行此操作的最佳方法是什么?

目前,我允许用户将带有预定义“参数”的字符串输入到文本框中。

  

例如。 “嗨%%名称%%,请提取您的订单号%%订单%%。”

然后存储此通用字符串,然后在需要时使用实际数据填充。人口只通过一系列这类陈述来完成:

Str1.Replace("%%Name%%", data.Name)
Str1.Replace("%%Order%%", data.Order)

4 个答案:

答案 0 :(得分:3)

你正在寻找格式字符串吗?

string str = String.Format("five = {0} hello {1}", 5, "World");

或者

string base = "five = {0} hello {1}"
string str = String.Format(base, 5, "World");

答案 1 :(得分:0)

你所拥有的是“足够好”......你只需要记住将Replace()调用的结果分配回原来:

Str1 = Str1.Replace("%%Name%%", data.Name)
Str1 = Str1.Replace("%%Order%%", data.Order)

通过将其作为状态机实现,可以获得更好的性能,但所涉及的复杂性不太可能证明它的合理性,而且我同样觉得像一个功能齐全的模板库在这里可能有些过分。 YAGNI

如果我建议使用不同的语法,我可能会使用前导@符号或问号来匹配常见的数据库参数语法。或者,如果您可以使用索引参数而不是命名参数,则可以按照另一个答案中的建议使用String.Format()。

答案 2 :(得分:0)

Stack Overflow上的其他地方也有类似的问题。以下是对Dogget

https://stackoverflow.com/a/4077118/1721527答案的部分修改

定义一个这样的函数:

public string Format(string input, object p)
{
    foreach (PropertyDescriptor prop in TypeDescriptor.GetProperties(p))
    {
        input = input.Replace("%%" + prop.Name + "%%", (prop.GetValue(p) ?? "(null)").ToString());
        return input;
    }
}

这样称呼:

Format("test %%first%% and %%another%%", new { first = "something", another = "something else" })

答案 3 :(得分:0)

根据用例的复杂程度,您可能希望使用模板库,例如NVelocityStringTemplate或类似的。

使用NVelocity,您可以拥有这样的模板:

"Hi $data.Name, please pick up your order number $data.Order."

然后,您只需将模板和data对象传递给NVelocity enginge,然后让它替换占位符。