【问题标题】:How to return an array in C# without creating array inside the method? [closed]如何在 C# 中返回一个数组而不在方法内创建数组? [关闭]
【发布时间】: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&lt;int&gt; 并在方法之外调用ToArray,但问题仍然存在:为什么? (另外,lr 是什么?)
  • 当然会有编译时错误,首先你必须返回int[],但返回0。还有这是什么 -> [i++]=i;?

标签: c# arrays methods return-type


【解决方案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 函数内的本地函数,则此答案有效。极端,是的,但涵盖了您到目前为止所问的内容
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-05
  • 2021-01-20
  • 1970-01-01
  • 1970-01-01
  • 2021-10-17
  • 2017-01-02
  • 2014-06-20
相关资源
最近更新 更多