如何使方法接收两种不同的数据类型并只返回其中一种C#?

时间:2013-11-13 13:39:12

标签: c# arrays

本周我开始自己学习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 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:2)

您声明了一个返回int(int[] NumGen())数组的方法,同时将其返回值赋给int(Num[i] = NumGen()只返回一个来自它的int(return Num[i];)。

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

您可以将其全部替换为:

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

但是,这将忽略了学习arrays and their syntax的重点。

答案 2 :(得分: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];

     }

答案 3 :(得分:1)

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

更改为

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

它应该没问题;)