【发布时间】:2017-07-21 11:05:50
【问题描述】:
我正在尝试使用 c# 6.0 中的字符串插值将人名作为动态值插入到电子邮件正文中。
概念证明
public class Program
{
public static void Main()
{
var p = new Person { FirstName = "John", LastName = "Smith" };
var msg = $"{p.FirstName} says 'Hello World!'";
Console.WriteLine($"Message: {msg}");
}
}
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
这个概念证明输出字符串:
消息:John 说“Hello World!”
实施
所以现在当我尝试使用这个概念来构建我的 MailMessage 时,我在电子邮件中收到了{Contact.FirstName} 输出。代码如下:
private string _Body;
public string Body
{
get { return _Body; }
set
{
_Body = value;
RaisePropertyChangedEvent("Body");
}
}
var Contacts = Context.Contacts
.Where(x => x.ContactGroupId == ContactGroupId && x.Deleted == false);
// By this point, Body will already have a value containing the interpolation.
// For example: Body = "Message: {Contact.Name} says \"Hello World!\"";
foreach (var Contact in Contacts)
{
MailMessage Msg = new MailMessage();
MailMessage.Body = ${Body}
}
问题
这应该将正文呈现为:
消息:John 说“Hello World!”
相反,渲染的是:
消息:{Contact.FirstName} 说“Hello World!”
如果我实际上并未在代码中对字符串进行硬编码,如何将变量插入到字符串中?
【问题讨论】:
-
字符串插值是一个编译时特性。它不能用于在运行时替换令牌。
-
你的代码甚至不应该编译。
-
应该是
MailMessage.Body = $"{Body}"...
标签: c#