我正在尝试使用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!”
如果我在代码中实际上没有对字符串进行硬编码,如何将变量插入到字符串中?
答案 0 :(得分:4)
public class Main {
public static void main(String args[]) {
Library library = new Library();
SerializationSjow seri = new SerializationSjow();
seri.deserialization(library);
library.loginMenu();
seri.serialization(library);
}
}
无法编译。
你不能在运行时生成插值,它是一个语法糖,由编译器转换为${Body}
。
您可以使用String.Format
或Replace
中的StringBuilder
来解决您的问题:
String
答案 1 :(得分:0)
字符串插值是一种编译时功能。这就是为什么你可以do some neat things like:
Console.WriteLine($"When {condition} is true, {(condition ? "it's true!" : "It's False")}");
你基本上将C#代码放在字符串!
中但是,如果它是作为动态功能实现的,您可以在其中加载字符串并在运行时对其进行评估,那么您将面临安全风险,就像在JavaScript中使用eval
一样。那么,有意义的是,你不可能做你想做的事。