【问题标题】:C# String.Length from Microsoft Documentation来自 Microsoft 文档的 C# String.Length
【发布时间】:2016-02-08 18:25:49
【问题描述】:

Microsoft documentation states 表示此代码将返回 7 个字符

Length 属性返回此实例中 Char 对象的数量, 不是 Unicode 字符的数量。

string characters = "abc\u0000def";
Console.WriteLine(characters.Length);    // Displays 7

我需要一个函数来返回结果 12,因为有 12 个不同的字符。我可以使用哪个功能?

【问题讨论】:

  • “有 12 个不同的字符” - 不,有 7 个 - \u0000一个字符。你在用它做什么,你需要把它当作它有 12 个字符?
  • 有趣。为什么你认为那是 12 个字符?您知道其中 6 个组成一个 unicode 字符并由编译器解释吗?
  • 您是否正在寻找一种方法来使字符串文字不被解释为转义序列?因为一旦你有一个七字符的字符串,它就是一个七字符的字符串;没有明确的方法可以再次将其转换为 12 个字符的字符串。

标签: c# string string-length


【解决方案1】:

您必须阻止编译器对文字的解释。这可以通过 @ 前缀来完成,如下所示:

var characters = @"abc\u0000def";

此字符串的Length 属性将返回 12,但字符串中将不再有实际的 unicode 字符。

【讨论】:

  • 打败我。这里的问题是 there will no longer be an actual unicode character in the string 如果你使用它会转义。
【解决方案2】:

C# 编译器会将\u0000 替换为空字节。这意味着,在执行时,您的记忆中只会有 7 个字符。

如果您不想让编译器替换特殊字符,则必须首先转义反斜杠:

string characters = "abc\\u0000def";
Console.WriteLine(characters.Length);    // Displays 12

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-11
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多