如何在 C# 中返回一个数组而不在方法内创建数组? [关闭]
Posted
技术标签:
【中文标题】如何在 C# 中返回一个数组而不在方法内创建数组? [关闭]【英文标题】:How to return an array in C# without creating array inside the method? [closed] 【发布时间】:2018-04-15 21:52:05 【问题描述】:我必须在做一些计算后返回一个数组。但是如果不在方法中创建数组,我不知道该怎么做。
int[] arr = numbers(number1, number2); // this is in the main function
这是我创建的方法
static int[] numbers(int number1, int number2)
for(int i=number1; i<=number2; i++)
if(i%2==1)
return [i++]=i;
return 0;
这是我到目前为止所做的,但它有编译时错误。 如果 i 中的值与 main 方法中的数组奇数,我要做的就是返回。
请注意,我不想在 numbers 方法中创建另一个数组。
最初的问题是关于在给定范围内查找奇数。 Number1 和 number2 是范围限制。方法声明没有变化。并且可以根据需要创建内容。最后它应该以方法的返回类型返回。返回的东西将被整数数组捕获。就是这样,最后打印数组
【问题讨论】:
那么谁来创建数组呢?你真正想做什么?为什么不在方法内创建数组?或者创建一个数组 field 并返回对它的引用,但存在相关的错误和返回陈旧、脏数据或突然更改数据的风险? 如果你告诉我们你为什么要做这样的事情,可能有其他解决方案吗? 但是……为什么?现在您的问题是这样的:“如何在不创建数组的情况下创建数组?”。你想填充一个用另一种方法创建的数组吗?您是否需要比数组更灵活的东西,因为您不知道它会有多少元素? 您可以用yield return
代替IEnumerable<int>
并在方法之外调用ToArray
,但问题仍然存在:为什么? (另外,l
和 r
是什么?)
当然会有编译时错误,首先你必须返回int[]
,但返回0
。还有这是什么 -> [i++]=i;
?
【参考方案1】:
static IEnumerable<int> Number(int number1, int number2)
for(int i=number1; i<=number2; i++)
if(i%2==1)
yield return i;
或
static int[] Number(int number1, int number2)
var x = new int[number2];
int y = 0;
for(int i=number1; i<=number2; i++)
if(i%2==1)
x[y] = i;
y++;
return x;
这就是你在不创建数组的情况下寻找的东西
这样称呼:
var something = Number(1,5).ToArray();
【讨论】:
乔迪真的很感激这个答案。但我只能更改 Numbers 方法的主体 @Joe 我认为您在某个编码站点并通过了测试或其他东西。 @Joe SO 不是问答服务。您甚至还没有发布实际问题。至于小测验,你意识到你已经失败了吗? @SeM-ՍեՄ ...是的,你当然是对的。当这是连续第 10 个问题时,有时很难保持良好状态。 @Joe 不,你没有问。您只发布了部分问题。有这么多很多种可能的答案,真让人生气。如果您将其设为Numbers
函数内的本地函数,则此答案有效。极端,是的,但涵盖了您到目前为止所问的内容以上是关于如何在 C# 中返回一个数组而不在方法内创建数组? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章