c# - 为什么这段代码不能编译? - 对象赋值、调用、递增、递减和新建可用作指令

标签 c#

我正在从 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);    
}

它编译完美,但如果我对“recurd”函数做一点改动:

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);

关于c# - 为什么这段代码不能编译? - 对象赋值、调用、递增、递减和新建可用作指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/913215/

相关文章:

c# - HangFire RecurringJob 中的更新方法时间?

c# - 如何获取所有网络适配器的列表?

c# - Linq - 从两个表中提取数据 - 效率 - 替代 linq 查询

c# - 将 Windows 窗体工具提示锚定到鼠标

c# - .NET DateTime 到 time_t 秒

C# 更改嵌套类的方法修饰符

c# - 更改 XtraGrid 中的数据源

c# - 使用 Blazor 将输入文本动态绑定(bind)到类/对象属性

c# - 将 C++ DLL 函数指针导入到 C#

c# - 如何从 COM 客户端访问基于列表(Of T)的对象