Строка как массив char [] в C # 3.0? - PullRequest
1 голос
/ 03 декабря 2008

Спецификация C # 3.0 имеет следующий пример кода в разделе 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 ]

7 голосов
/ 03 декабря 2008

Это недопустимый символ '-'. Измените '-' на '-'

1 голос
/ 03 декабря 2008

Какую ошибку вы получаете?

System.String имеет [] средства доступа с .NET v1.0

0 голосов
/ 03 декабря 2008

Это работает для меня, но код, который вы вставили в свой вопрос, имеет символ «m-тире» (шестнадцатеричный 96) вместо знака минус (шестнадцатеричный 2D) - возможно, это проблема шрифта?

0 голосов
/ 03 декабря 2008

Почему вы разделяете путь и имя файла в sidenote? Для этого в классе Path есть много очень полезных функций.

Используйте Path.GetFileName () для имени файла, Path.GetDirectoryName () для имени каталога.

0 голосов
/ 03 декабря 2008

Символ тире, который вы видите в своем блоке кода, является символом тире, а не знаком минус. Они похожи, но они разные. Куда бы вы ни вырезали и не вставили код, он изменил его на неправильный символ.

char ch = path[i - 1];

совершенно верно (если минус, а не тире)

0 голосов
/ 03 декабря 2008

Согласно MSDN (http://msdn.microsoft.com/en-us/library/362314fe(VS.71).aspx), это было даже возможно в .net 1.1, конечно, вы можете иметь

string myString = "Филип Экберг";

И затем получить доступ к первому символу, выполнив myString [0]

...