在方法中使用随机rnd会导致多个错误

pie*_*ipe -3 c# random

下面的方法有问题.我得到的当前错误是"它不返回任何值"如果我将返回数字放在括号之外,它在当前上下文中不存在.如果我一起删除括号,我得到:

嵌入式语句不能是声明或带标签的语句当前上下文中不存在名称"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)

Bra*_*NET 6

首先,你的语义不匹配.您正在返回单个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条件中使用将产生比传递值多一个迭代,所以我切换到<.

如果您根本不需要循环,那么只需删除它,您的问题就会得到解决.目前,循环语义和代码的其余部分不匹配,这导致了问题.