如果我有一个格式字符串多次使用相同的占位符,例如:
emailBody = $"Good morning {person.GetFullName()}, blah blah blah, {person.GetFullName()} would you like to play a game?";
Run Code Online (Sandbox Code Playgroud)
会person.GetFullName()被评估两次,还是编译器足够聪明,知道它们是相同的值,应该评估一次?
Jon*_*eet 38
是的,它将被评估两次.它不可能知道它是相同的值.例如:
Random rng = new Random();
Console.WriteLine($"{rng.Next(5)}, {rng.Next(5)}, {rng.Next(5)}");
Run Code Online (Sandbox Code Playgroud)
它就像你刚用表达式作为方法参数一样 - 如果你调用了:
Console.WriteLine("{0} {1}", person.GetFullName(), person.GetFullName());
Run Code Online (Sandbox Code Playgroud)
...你希望GetFullName被叫两次,不是吗?
如果您只想评估一次,请事先这样做:
var name = person.GetFullName();
emailBody = $"Good morning {name}, blah blah blah, {name} would you like to play a game?";
Run Code Online (Sandbox Code Playgroud)
或者只是使用普通string.Format电话:
emailBody = string.Format(
"Good morning {0}, blah blah blah, {0} would you like to play a game?",
person.GetFullName());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
815 次 |
| 最近记录: |