结合字符串插值和string.format函数

10

我在想是否有可能将字符串插值和C#6.0中引入的string.format结合起来使用?有没有像这样更聪明的想法呢?

string fancyString = $"My FancyString was created at { DateTime.Now }" + " and I want to add some static with string.format like {0}";

3
你为什么想要这样做?通过这样做,你能实现什么,而使用字符串插值则无法实现呢? - Fabjan
你要如何使用它呢?将内插字符串传递给 String.Format 吗? - kiziu
当然可以在插值后使用string.format,像这样:string.format(fancyString, SomethingToFillYour{0}With); 但是你为什么要这样做呢? - Thorarins
是的,通常字符串插值应该能够完成整个工作,但如果您不想从string.format更改整个代码,则可以寻找将两者结合起来的可能性。 - Tom
2
不要考虑修改代码。当然可以在新的内容中使用插值,以及在重构时将 string.Format 调用转换为插值,但是将现有的 string.Format 调用更改为部分插值听起来只会让维护变得更加混乱。 - James Thorpe
1个回答

17

通过将{0}写为{{0}},使字符串插值不会改变它,从而避免了您的{0}被转义。然后,您可以将该字符串传递给string.Format以替换{0}

对于那些想知道为什么要这样做的人,我可以想象一种可能性是您想要创建可重用的模板,例如:

var urlTemplate = $"<a href='{BaseHref}/some/path/{{0}}'>{{1}}</a>";

var homeLink = string.Format(urlTemplate, "home.html", "Home");

var aboutLink = string.Format(urlTemplate, "about.html", "About Us");

当然,这个例子太简单了,不值得使用这种技术,但是想象一下,如果您有一个包含大量变量的模板,并且您只关心从一个渲染的模板到另一个模板更改了几个变量。这将比在您的模板中使用{32},{33},{34} ...等更易读。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接