做字符串.格式化为值添加额外的引号

本文关键字:添加 字符串 格式化 | 更新日期: 2023-09-27 17:59:36

我发现每当我使用这个方法字符串时。Format(),它为我的变量值添加了额外的引号和反斜杠。

string value = string.Format("sample {0}", someText);

在VS Watch上,我看到了以下结果:

"sample '"blah'""

在文本可视化工具中,我得到的是:

sample "blah"

有人能告诉我为什么我拿不到这个吗?

"sample blah"

请注意:我已经有了一个解决方法,即string.Replace("'"",""),但我只想知道额外的引号是在哪里添加的

做字符串.格式化为值添加额外的引号

我100%确信,在您的上下文中,某些文本包含额外的引号。

string.Format("sample {0}", "blah")

返回"sample blah"

这只与VS调试有关。它实际上并没有向字符串添加任何内容。VS只是转义字符串,无需担心或处理。

编辑:要获得sample blah(不带任何引号)而不是sample "blah",您需要替换引号:

Console.WriteLine(value.Replace("'"", "");

现在,在VS Debugger中,您可以看到以下内容:"sample blah",而在文本文件中,例如,您将看到sample blah

它显示您的sometext包含"blah"而不是blah。这就是调试期间出现'"的原因。

您的格式字符串中没有任何引号。如果希望字符串包含引号,则需要在格式字符串中添加引号。

字符串foo="foo"foo的值为foo

字符串foo="''"foo''"foo的值为"foo"

string.Format根本不会向任何字符串添加任何内容。

区别在于如何在Visual Studio和文本可视化工具中查看字符串。因为"是一个转义序列字符,所以您需要在代码部分中将其用作'"

据我所知,这些转义序列字符是C语言标准遗留下来的。

  • https://en.wikipedia.org/wiki/String_literal#Escape_sequences
  • https://en.wikipedia.org/wiki/Escape_sequences_in_C

有人能告诉我为什么我拿不到这个吗?

"样品"

因为在您的示例中,您没有执行任何操作来获取此字符串。字符串的开头或结尾都没有转义的"字符。您可以在字符串中使用转义符。format类似;

string someText = "blah";
string value = string.Format("'"sample {0}'"", someText); 

结果将是;

"sample blah"