插值存储在数据库中的字符串

joh*_*ual 4 c# string string-interpolation verbatim-string

我们希望维护从ASP.NET Web应用程序发送到数据库中的电子邮件.想法是电子邮件的格式存储在数据库中.

问题是电子邮件应包含订单特定信息,例如:

感谢您的订单John Smith,

您的订单已收到1234

我想要实现的是我在数据库列值中使用了字符串verbatims,它将像这样存储:

感谢您的订单{o.customer},

您的订单已收到{o.id}

我很好奇是否可以进行字符串插值,其中值已经在格式化的字符串中.如果我尝试使用String.Format(dbEmailString)它会抛出异常:

mscorlib.dll中出现"System.FormatException"类型的异常,但未在用户代码中处理

附加信息:输入字符串的格式不正确.

Jam*_*rpe 7

字符串插值是一种编译时功能.你可以使用常规做你想做的事String.Format:

var formattedEmail = String.Format("Thank you for your order {0}, your order {1} has been received", o.customer, o.id);
Run Code Online (Sandbox Code Playgroud)

如果您需要用值替换各种不同的占位符,也许您需要寻找更加动态的模板系统,可以使用非常基本的模板系统String.Replace.

底线是你不能以这种方式直接从存储的字符串中引用代码中的变量 - 你需要在运行时以某种方式处理字符串.