在字面字符串中添加字符串

9

我有一个名为defaultPath的路径,我想将其添加到这个verbatim字符串文字中,但是无法完全理解如何在它周围加上引号。

    @"""C:\Mavro\MavBridge\Server\MavBridgeService.exe"" /service /data ""..\Data"""

我试图添加 +defaultPath 来替换 Data。例如,假设我有一个名为 Data.Apple 的文件夹,我希望输出结果为

   "C:\Mavro\MavBridge\Server\MavBridgeService.exe" /service /data "..\Data.Apple"

但是,当我已经连续做了半个小时时,我开始感到

   "C:\Mavro\MavBridge\Server\MavBridgeService.exe" /service /data "..\"Data.Apple

或者

   "C:\Mavro\MavBridge\Server\MavBridgeService.exe" /service /data "..\" + defaultPath

欢迎回来,我可以再次帮助您吗?这听起来像是我们在继续昨天的工作,我说得对吗? - General Grey
1
为什么不保护好你的眼睛呢?创建一个名为QuoteString()的函数,并以任何你喜欢的方式拼接它们... - Adriano Repetti
哈哈,差不多就是这样!昨晚我取得了很好的进展! - heinst
3个回答

14

推荐的做法如下:

string.Format(@"""C:\Mavro\MavBridge\Server\MavBridgeService.exe"" /service /data ""..\{0}""", defaultPath);
这样也可以:
@"""C:\Mavro\MavBridge\Server\MavBridgeService.exe"" /service /data ""..\" + defaultPath + "\"";
第一个方法使用了 string.Format,它会将第一个参数中的 {0} 替换为第二个参数的值,并返回结果。
第二个方法使用了经典的字符串拼接方式。我所做的是删除最后一个反斜杠后面的双引号(""..\ 而不是 ""..\""),因为您不希望在反斜杠后面有引号,而是希望在 defaultPath 后面加上引号。这段代码的作用是:先附加 defaultPath (" + defaultPath),再附加结束引号 (+ "\"")。

@heinst:已更新答案。这对你有意义吗? - Daniel Hilgarth
我试图做第二个答案...我只是没有添加第二个...你为什么要添加那个?除此之外,它们都是有意义的。 - heinst
为什么你说这是“首选”?就我个人而言,我认为在不需要进行任何实际格式化的地方使用string.Format进行连接有点像代码异味。像大多数事情一样,这取决于具体情况... - nicodemus13
@heinst:我猜你在谈论这部分代码:"""? 如果我写成@"""",会更清晰明了吗?这样可以在路径后添加闭合引号。如果没有它,结果将是"C:\Mavro\MavBridge\Server\MavBridgeService.exe" /service /data "..\Data.Apple,而不是"C:\Mavro\MavBridge\Server\MavBridgeService.exe" /service /data "..\Data.Apple"。 - Daniel Hilgarth
@nicodemus13:这取决于情况,你说得对。但在这个例子中,我发现使用string.Format的版本比另一个更易读。 - Daniel Hilgarth

13

所以,如果你想利用C# 6的字符串内插功能,也可以这样做:

var randomText = "insert something";
var yourString = $@"A bunch of text in here 
that is on seperate lines
but you want to {randomText }";

4
如果你想在创建 JSON 字符串等情况下包含花括号,在这种情况下,你可以像双引号一样将它们重复来进行转义。例如:string value = "test"; string json = $@"{{""val"": ""{value}""}}"; - R. Schreurs

3
使用string.Format将变量插入引号之间:
string path = "Data.Apple";
string verbatim = string.Format(@"""C:\Mavro\MavBridge\Server\MavBridgeService.exe"" /service /data ""{0}""", path);
MessageBox.Show(verbatim);

它使得读取和实现更加容易,您可以以类似的方式使用变量部分替换路径的其他部分。

如果您尝试仅将“defaultPath”变量附加到末尾,则永远无法正常工作,因为您已经添加了闭合"


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