2008-12-03 36 views
1

C# 3.0 spec具有第10.6.1.3下面的代码示例“输出参数”:字符串作为C#3.0中的char []数组?

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]”)?

+1

吉姆 - 请注意您的回复如何与您回复的答案不同步?您需要将回复添加为评论,而不是添加新答案,以确保对话流动。 你还没有评论的声望呢,我明白了,但你知道...... – 2008-12-03 18:38:13

回答

6

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

+0

谢谢达林!没有注意到,完全看错了东西! – 2008-12-03 18:13:04

1

你有什么错误?

System.String已自.NET 1.0

0

你在你的代码块中看到的连字符是一个破折号不是减号。他们看起来很相似,但他们不一样。无论你剪切并粘贴代码,都将其改为不正确的字符。

char ch = path[i - 1]; 

是完全合法的(只要 - 为负的,而不是一个破折号)

0

在旁注中,为什么要拆分路径和文件名?在Path课上有很多非常有用的功能可以帮助你。

使用Path.GetFileName()作为文件名,Path.GetDirectoryName()作为目录名称。

0

它适用于我,但你粘贴在你的问题的代码有一个'm-dash'字符(十六进制96),而不是减号(十六进制2D) - 也许这是一个字体问题?