嵌套字符串插值

时间:2018-11-19 23:31:43

标签: c# string string-interpolation

我在C#6中遇到了嵌套字符串插值的问题。

例如,有一个字符串:

string test = "StartText MiddleText1 MiddleText2 EndText";

如果我只想对MiddleText1应用 ToUpper()方法,我可以这样做:

string test = $@"StartText {"MiddleText1".ToUpper()} MiddleText2 EndText";

但是如果我想对这部分字符串应用字符串方法,例如 Replace(),该怎么办?

{"Middletext1".ToUpper()} MiddleText2

我希望这样的事情会起作用:

string test = $@"StartText {"{"MiddleText1".ToUpper()} MiddleText2".Replace("x", "y")} EndText";

但是这种语法是错误的-我尝试了很多变体,使用了配额,但是我无法为此目的获得正确的语法。  我希望不要将字符串分成不同的部分。有没有办法仅使用插值功能来解决?

1 个答案:

答案 0 :(得分:6)

我的建议是不要一站式地做所有事情

以下是答案

var middle = "MiddleText1";
middle = middle.ToUpper();

var middle2 = $"{middle} MiddleText2";
middle2 = middle2.Replace("x", "y");

string test = $"StartText {middle2} EndText";

将它们全部添加到一起。

string test = $"StartText {$"{"MiddleText1".ToUpper()} MiddleText2".Replace("x", "y")} EndText";

简而言之,您只是缺少了一个$

但是,即使这样也很混乱,因为我不确定所有替换的目的,文本的来源以及您要解决的问题