如何在 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&lt;int&gt; 并在方法之外调用ToArray,但问题仍然存在:为什么? (另外,lr 是什么?) 当然会有编译时错误,首先你必须返回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# 中返回一个数组而不在方法内创建数组? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

减少数组中的最后一个字符串元素而不在C#中删除它?

将文件加载为字节数组,而不在内存中分配它 C#

C语言 怎么返回一个数组

如何在 C# 中转换为字节时截断字符串?

如何在c#中返回结构复杂的字符串数组

如何在 c# 中基于构造函数方法创建数组?