代码之家  ›  专栏  ›  技术社区  ›  Jim Anderson

在C#3.0中字符串是char[]数组吗?

  •  1
  • Jim Anderson  · 技术社区  · 16 年前

    这个 C# 3.0 spec 第10.6.1.3节“输出参数”中有以下代码示例:

    using System;
    class Test
    {
        static void SplitPath(string path, out string dir, out string name) {
            int i = path.Length;
            while (i > 0) {
                char ch = path[i – 1];
                if (ch == '\\' || ch == '/' || ch == ':') break;
                i--;
            }
            dir = path.Substring(0, i);
            name = path.Substring(i);
        }
        static void Main() {
            string dir, name;
            SplitPath("c:\\Windows\\System\\hello.txt", out dir, out name);
            Console.WriteLine(dir);
            Console.WriteLine(name);
        }
    }
    

    我无法在VS2005/C#2.0中编译此代码。C#3.0中字符串的行为是否发生了变化,使得字符串可以被称为char[]数组而无需显式转换(语句“ch=path[i]”)?

    6 回复  |  直到 16 年前
        1
  •  7
  •   Darin Dimitrov    16 年前

    它是一个无效字符“”。将“”更改为“-”

        2
  •  1
  •   James Curran    16 年前

    你犯了什么错误?

    系统。从那以后,字符串有[]个访问器。NET v1.0

        3
  •  0
  •   Filip Ekberg    16 年前

    根据MSDN( http://msdn.microsoft.com/en-us/library/362314fe(VS.71).aspx )这在.net 1.1中甚至是可能的,你当然可以有一个

    string myString=“Filip Ekberg”;

    然后通过执行myString[0]来访问第一个char

        4
  •  0
  •   Erik van Brakel scottrakes    16 年前

    顺便说一句,为什么要这样分割路径和文件名?在 Path 类。

    使用路径。GetFileName()用于文件名Path。GetDirectoryName()用于获取目录名。

        5
  •  0
  •   Guy Starbuck    16 年前

    它对我有效,但你在问题中粘贴的代码有一个“m-dash”字符(十六进制96)而不是减号(十六进制2D)——也许是字体问题?

        6
  •  0
  •   BenAlabaster    16 年前

    您在代码块中看到的破折号字符是em破折号,而不是减号。它们看起来很相似,但不同。无论从何处剪切和粘贴代码,都会将其更改为不正确的字符。

    char ch = path[i - 1];
    

    完全有效(只要-是减号而不是破折号)