9

今天发现把字符串放到资源文件里会被当成文字处理,即把“Text for first line \n Text for second line”会导致转义字符本身被转义,所以存储的是“第一行的文本 \n 第二行的文本” - 然后这些出现在显示屏中,而不是我的回车和制表符

所以我想做的是使用 string.replace\\变成\- 这似乎不起作用。

s.替换(“\\\\”,“\\”);

根本不更改字符串,因为字符串认为只有 1 个反斜杠

s.Replace("\\", "");

替换所有双引号,只留下 n 而不是 \n

此外,使用@和一半的\字符或Regex.Replace方法给出相同的结果

有谁知道在不逐个字符循环的情况下做到这一点的好方法?

4

3 回答 3

15

由于\n实际上是单个字符,因此您无法通过简单地替换字符串中的反斜杠来实现这​​一点。您需要\用转义字符替换每一对和以下字符,例如:

s.Replace("\\n", "\n");
s.Replace("\\t", "\t");
etc
于 2008-12-10T22:20:50.793 回答
9

最好自己调整 resx 文件。可以通过两种机制输入换行符:您可以将 resx 文件编辑为 XML(在解决方案资源管理器中右键单击,选择“打开为”并选择 XML),或者您可以在设计器中进行。

如果您在 XML 中执行此操作,只需按 Enter,退格到您创建的换行符的开头,就完成了。您也可以使用搜索和替换来做到这一点,尽管它会很棘手。

如果您使用 GUI resx 编辑器,按住 SHIFT 的同时按 ENTER 会给您一个换行符。

你可以做运行时替换的事情,但正如你所发现的那样,开始起来很棘手——在我看来,这构成了一种代码味道。(您也可以提出性能参数,但这取决于调用字符串资源的频率以及您的应用程序的一般规模。)

于 2008-12-10T22:31:44.437 回答
0

我实际上是使用 John 的解决方案并直接编辑 XML,因为这是该项目的更好解决方案,但 codelogic 回答了让我发疯的问题。

于 2008-12-10T23:03:15.963 回答