2

这周我开始自学 C#,我可能无法理解一些概念,对于理解我的任何困难,我深表歉意。我想创建一个接收 int[] 和 int,但只返回 int[] 的方法。我收到两个错误。

对于主要方法:

无法将类型“int[]”隐式转换为“int”

    static void Main(string[] args)
    {
        int[] Num = new int[5];
        int i;
        for (i = 0; i < 5; i++)
            Num[i] = NumGen(Num, i);
    }

创建的方法:

无法将类型“int”隐式转换为“int[]”

  static int[] NumGen(int[] Num, int i)
    {
        Random rndm = new Random();
        Num[i] = rndm.Next(100) + 1;
        return Num[i];

     }

我想了解我做错了什么以及将来如何避免这个错误。感谢您提前回答!

编辑:谢谢大家,您的建议解决了问题。:)

4

4 回答 4

8

只是NumGen- 的返回类型应该是int

static int NumGen(int[] Num, int i)
{
    Random rndm = new Random();
    Num[i] = rndm.Next(100) + 1;
    return Num[i];
}

但是:您的代码有一个严重的错误。new Random()由于它是如何通过时钟播种的,因此每次都会产生相同的值。更好的方法是:

static int NumGen(Random rndm, int[] Num, int i)
{
    Num[i] = rndm.Next(100) + 1;
    return Num[i];
}
static void Main(string[] args)
{
    int[] Num = new int[5];
    Random rand = new Random();
    for (int i = 0; i < 5; i++)
        Num[i] = NumGen(rand, Num, i);
}

或者更干净:

static int Randomize(Random rndm)
{
    return rndm.Next(100) + 1;
}
static void Main(string[] args)
{
    int[] Num = new int[5];
    Random rand = new Random();
    for (int i = 0; i < 5; i++) Num[i] = Randomize(rand);
}
于 2013-11-13T13:41:35.150 回答
2

您正在声明一个返回 int () 数组的方法int[] NumGen(),同时将其返回值分配给 int ( Num[i] = NumGen())仅从它 ( return Num[i];) 返回一个 int。

如果你能解释这段代码应该做什么,也许我们可以建议这段代码应该是什么样子。

您可以将其全部替换为:

var random = new Random();
int[] randomNumbers = Enumerable.Range(0, 5)
                                .Select(i => random.Next(100) + 1)
                                .ToArray();

但这会错过学习数组及其语法的意义。

于 2013-11-13T13:41:55.880 回答
1

Num[i] 是一个 int,而不是 int[]。因为它是 int 数组中的一项,并且该数组中的任何元素都是 int。所以替换第一行:

static int NumGen(int[] Num, int i)
    {
        Random rndm = new Random();
        Num[i] = rndm.Next(100) + 1;
        return Num[i];

     }
于 2013-11-13T13:41:56.837 回答
1

你希望你的函数返回 int (一个数字)而不是 int[] (一个数字数组)

改成

static int NumGen(int[] Num, int i)

应该没问题;)

于 2013-11-13T13:42:17.460 回答