Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 嵌套字符串插值_C#_String_String Interpolation - Fatal编程技术网

C# 嵌套字符串插值

C# 嵌套字符串插值,c#,string,string-interpolation,C#,String,String Interpolation,我在C#6中遇到了嵌套字符串插值的问题 例如,有一个字符串: string test = "StartText MiddleText1 MiddleText2 EndText"; 如果我只想对MiddleText1应用ToUpper()方法,我可以这样做: string test = $@"StartText {"MiddleText1".ToUpper()} MiddleText2 EndText"; 但是,如果我想对字符串的这一部分应用string方法,例如Replace(),该怎么办呢

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

例如,有一个字符串:

string test = "StartText MiddleText1 MiddleText2 EndText";
如果我只想对MiddleText1应用ToUpper()方法,我可以这样做:

string test = $@"StartText {"MiddleText1".ToUpper()} MiddleText2 EndText";
但是,如果我想对字符串的这一部分应用string方法,例如Replace(),该怎么办呢

{"Middletext1".ToUpper()} MiddleText2
我希望这样的事情会奏效:

string test = $@"StartText {"{"MiddleText1".ToUpper()} MiddleText2".Replace("x", "y")} EndText";
但这种语法是错误的——我尝试了很多变体,使用了配额,但我无法获得正确的语法。
我不希望把绳子分成不同的部分。有没有办法只使用插值功能来解决这个问题

我的建议是,不要把所有事情都放在一行上

以下是答案

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";
简而言之,您只是缺少了一个
$


然而,即使这样也很混乱,因为我不确定所有的替换是为了什么,这篇文章来自哪里,以及你试图解决的问题是什么<代码>字符串测试=$@“StartText{$”{“MiddleText1.ToUpper()}MiddleText2.Replace(“x”,“y”)}EndText”。。。也就是说,这看起来很痛苦,而且真的违背了字符串插值的目的。停止尝试在一行中做所有事情,如果你把它分开,你就会知道问题所在。谢谢格洛林,好球。你能不能为这项任务提出另一种方法,而不让可读性这么差——加入中间变量?这是一种很好的方法,但原始文本很大,我需要进行许多类似的方法调用,这就是为什么我试图得到一行解决方案以避免创建大量额外变量的原因。@Vladimir,这很公平,然而,您只是缺少了一个
$
,实际上这个问题来自于某种“html页面生成器”。它使用字符串扩展方法从一些文本卷创建html页面,返回嵌入在不同html标记中的内部字符串。例如,它将返回标记中的一些部分,然后结果嵌入,然后结果放入标记中,等等。现在我看到它将非常难以读取。也许你可以建议另一种方法?@Vladimir在没有看到完整代码的情况下很难知道,尽管为了可读性,有时候(大多数情况下)简单更好。不要让任何人指责你把事情搞得支离破碎,让事情变得更加冗长。逐行阅读比理解复杂的嵌套语句更容易。不过,如果你有可以工作的代码,我可以建议你使用CodeReview吗stackExchange@Vladimir:通常,将大量操作压缩到一行中所得到的唯一结果是调试时间非常糟糕。因为你不知道这3-10个操作中哪一个会导致这个问题。不要担心性能。JiT非常擅长删除死代码,并在发布版本中添加/删除临时变量以提高性能。