Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么';这段代码不能编译吗对象赋值、调用、递增、递减和新建可以用作指令_C# - Fatal编程技术网

C# 为什么';这段代码不能编译吗对象赋值、调用、递增、递减和新建可以用作指令

C# 为什么';这段代码不能编译吗对象赋值、调用、递增、递减和新建可以用作指令,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

我正在用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”关键字:

试试这个:

static unsafe int recurd(int i, char* p) 
{
      Console.WriteLine(p[i]);
      return i == 10 ? 0 : 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);    
}

不会工作,因为它不返回任何内容。

应该是:return i==10?0:复发(i+1,p)

您忘了添加报税表。

我尝试了: i=i=10?返回0:返回重复(i+1,p)

而且 i==10?返回0:返回重复(i+1,p)

我会犯错误

但我试过: 返回i==10?0:复发(i+1,p)

而且很有效!! 谢谢你,乔尔! 谢谢你,乔纳森


我的错误是认为值是自动返回的,而“return”一词是不必要的。

我尝试了:I=I==10?返回0:返回重复(i+1,p)

还有i==10?返回0:返回重复(i+1,p)

我会犯错误

但我试过了:返回I==10?0:复发(i+1,p)

而且很有效!!谢谢你,乔尔!谢谢你,乔纳森


我的错误是认为值是自动返回的,没有必要使用“return”一词。

+1因为它是唯一正确解释错误消息原因的答案。没错,我尝试使用“return”一词,但我得到了相同的错误:(我怎么做?我是这里的新手:)我做到了。谢谢你的提示。
static unsafe int recurd(int i, char* p) 
{
      Console.WriteLine(p[i]);
      return i == 10 ? 0 : 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);    
}