1

我正在尝试获取具有\\\值的字符串的长度。

例如"C:\\\Dir1\\\Dir2\\\Dir3\\\Dir4\\\flower.bmp"

该示例的长度为 38 个字符。

当我使用长度属性时,长度为 33,基本上它被\\\视为一个字符。

我尝试过使用StringInfo.LengthInTextElements和其他各种方法来尝试使其正常工作,但没有任何乐趣。

4

6 回答 6

3

由于字符\用于对字符串中的字符进行转义,因此实际上从字面上\\表示字符。\

如果您想\\被视为两个字符,请尝试逐字字符串:

@"C:\\Dir1\\Dir2\\Dir3\\Dir4\\flower.bmp"

MSDN 参考

于 2013-05-03T15:58:18.843 回答
0

它是一个字符。如果您希望它是 2 个字符,请在开头使用 @ 或使用 \\ 两次(还没有尝试过..现在检查)

于 2013-05-03T15:57:33.670 回答
0

我的直觉说您有一个更根本的问题,但是您是否尝试过将其包装为文字字符串?

string myString = @'C:\\Dir1\\Dir2\\Dir3\\Dir4\\flower.bmp'
于 2013-05-03T15:58:11.170 回答
0

这是因为\\在 C# 中字符串被称为转义序列。您在代码中的字符串:

"C:\\Dir1\\Dir2\\Dir3\\Dir4\\flower.bmp"

当程序加载时,在磁盘和内存中变成这个字符串。

"C:\Dir1\Dir2\Dir3\Dir4\flower.bmp"

所以,你的例子的长度确实是33 个字符。原始字符串虽然在代码中可能是 38 个字符,但仅代表 33 个实际字符。

于 2013-05-03T15:58:45.370 回答
0

33 是正确的——\\确实只有一个字符,即\。只有调试器显示它已转义(例如,分别对or 、换行和回车\具有特殊含义)。\n\r

于 2013-05-03T15:58:49.677 回答
0

反斜杠\是一个转义字符,用于将特殊字符放入字符串中,例如\t制表符和\n换行符。双反斜杠\\将在编译后的字符串中插入一个反斜杠,而不是预期的 2。答案是@在字符串前面使用 c# 功能,以防止转义或转义所有反斜杠,这看起来像"C:\\\\Dir1\\\\Dir2\\\\Dir3\\\\Dir4\\\\flower.bmp"

于 2013-05-03T16:01:58.697 回答