一尘不染

带格式变量的字符串插值

c#

我可以做这个:

var log = string.Format("URL: {0}", url);

甚至像这样

var format = "URL: {0}";
...
var log = string.Format(format, url);

我在format其他地方有定义,并使用format变量而不是内联字符串。

在C#6中,这似乎是不可能的:

var format = $"URL: {url}"; // Error url does not exist
...
var url = "http://google.com";
...
var log = $format; // The way to evaluate string interpolation here

无论如何,有没有将字符串插值与之前声明的变量一起使用?

C#6似乎在编译期间内联了字符串。但是,请考虑使用此功能进行本地化,在config中定义格式或仅const在类中具有格式。


阅读 472

收藏
2020-05-19

共1个答案

一尘不染

不,您不能将字符串插值与字符串文字一起使用,因为即使使用字符串插值,编译器也会创建“常规”格式的字符串。

因为这:

string name = "bar";
string result = $"{name}";

编译成这样:

string name = "bar";
string result = string.Format("{0}", name);

运行时中的字符串必须是“常规”格式的字符串,而不是等效的字符串插值。

您可以改用普通的旧String.Format格式。

2020-05-19