0

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

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

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

例如。“嗨 %%Name%%,请拿起你的订单号 %%Order%%。”

然后存储这个通用字符串,然后在需要时用真实数据填充。人口只是通过一系列这些类型的语句来完成:

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

4 回答 4

3

您在寻找格式字符串吗?

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

或者

string base = "five = {0} hello {1}"
string str = String.Format(base, 5, "World");
于 2012-11-07T22:07:26.660 回答
0

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

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

您可以通过将其实现为状态机来获得更好的性能,但所涉及的复杂性不太可能证明它是合理的,而且我同样觉得功能齐全的模板库在这里可能有点矫枉过正。雅尼

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

于 2012-11-07T22:13:47.427 回答
0

Stack Overflow 上的其他地方也有类似的问题。这是在https://stackoverflow.com/a/4077118/1721527上对Dogget部分答案的修改

定义一个这样的函数:

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" })
于 2012-11-07T22:13:54.167 回答
0

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

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

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

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

于 2012-11-07T22:15:11.153 回答