本周我开始自己学习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];
}
我想了解我做错了什么以及如何在将来避免这个错误。 提前谢谢你的答案!
编辑: 谢谢大家,你的建议解决了这个问题。 :)
答案 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)
它应该没问题;)