下面的方法有问题.我得到的当前错误是"它不返回任何值"如果我将返回数字放在括号之外,它在当前上下文中不存在.如果我一起删除括号,我得到:
嵌入式语句不能是声明或带标签的语句当前上下文中不存在名称"rnd"
在没有这个问题之前我已经做过多种方法.我错过了什么?
public static int generateNumber(int timesUserWantsToGuess)
{
for (int i = 0; i <= timesUserWantsToGuess; i++)
{
Random rnd = new Random();
int num = rnd.Next(1, 50);
return num;
}
}
Run Code Online (Sandbox Code Playgroud)
首先,你的语义不匹配.您正在返回单个int,但正在循环中执行并返回.
如果你真的想要返回一组 int,你可以这样做:
public static IEnumerable<int> generateNumber(int timesUserWantsToGuess)
{
//Optional, but good error checking
if (timesUserWantsToGuess <= 0)
throw new ArgumentException("Invalid guess count");
Random rnd = new Random();
for (int i = 0; i < timesUserWantsToGuess; i++)
{
int num = rnd.Next(1, 50);
yield return num;
}
}
Run Code Online (Sandbox Code Playgroud)
注意yield用于返回序列中的下一个对象.您也不应该Random在紧密循环中实例化,因为它将导致生成相同的值(相同的种子).此外,<=在for条件中使用将产生比传递值多一个迭代,所以我切换到<.
如果您根本不需要循环,那么只需删除它,您的问题就会得到解决.目前,循环语义和代码的其余部分不匹配,这导致了问题.