我正在从Visual Studio Express 2008用C#测试一些代码:

delegate void Hm(int k);

static void Main(string[] args)
{
    char[] m = new char[10];

    m[0] = 'H'; m[5] = 'M';
    m[1] = 'o'; m[6] = 'u';
    m[2] = 'l'; m[7] = 'n';
    m[3] = 'a'; m[8] = 'd';
    m[4] = ' '; m[9] = 'o';

    unsafe { fixed (char* p = m) { Hm H = (k) => recurd(k, p); H(0); } }
    Console.ReadLine();
}

static unsafe int recurd(int i, char* p)
{
      Console.WriteLine(p[i]);
      if (i == 10) return 0; else return recurd(i + 1, p);
}


它可以完美地编译,但是如果我对“递归”功能进行一些更改:

static unsafe int recurd(int i, char* p)
{
      Console.WriteLine(p[i]);
      i == 10 ? 0 : recurd(i + 1, p);
     // if (i == 10) return 0; else return recurd(i + 1, p);
}


我收到一个错误消息:“仅可以将对象分配,调用,递增,递减和new的表达式用作指令”(这是西班牙语的翻译)。

为什么会出现此错误?我该如何解决?

最佳答案

您缺少“ return”关键字:

return i == 10 ? 0 : recurd(i + 1, p);

07-26 08:08