代码之家  ›  专栏  ›  技术社区  ›  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-1]”)?

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

    它是无效字符“_”。将“_”改为“—”

        2
  •  1
  •   James Curran    16 年前

    你犯了什么错误?

    自.NET 1.0版以来,System.String有[]个访问器

        3
  •  0
  •   Filip Ekberg    16 年前

    根据msdn( http://msdn.microsoft.com/en-us/library/362314fe(VS.71).aspx )这在.NET 1.1中甚至是可能的。当然,您可以

    string myString=“菲利普·埃克伯格”;

    然后通过执行mystring访问第一个字符[0]

        4
  •  0
  •   Erik van Brakel scottrakes    16 年前

    在旁注中,为什么要这样拆分路径和文件名?在 Path 班级。

    对文件名使用path.getfilename(),对目录名使用path.getdirectoryname()。

        5
  •  0
  •   Guy Starbuck    16 年前

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

        6
  •  0
  •   BenAlabaster    16 年前

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

    char ch = path[i - 1];
    

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