如何将方法数组中的新值赋给变量?

How to assign a new value from Method's Array to the Variable?

我的主要目标是创建一个方法,可以在其中输入一个数字,方法将从中选择一些其他数字(根据目的)并将它们组合在数组中。

我需要这个数组及其值是灵活的,所以我决定创建一个新变量,它在 Container() 和 [=15= 的范围内]Main() 方法。然后我将一个值从 Container() 分配给 optainer,但它不起作用(foreach不显示 Container() 中的所有数字,仅显示第一个)。我的问题在哪里?

        static int[] optainer;

        static void Container()
        {
            uint numb = uint.Parse(Console.ReadLine());
            for (int i = 1000000; i >= 1; i--)
            {
                if (numb % i == 0)
                {
                    optainer = new int[] { i };
                }

            }
        }

        static void Main(string[] args)
        {
            Console.WriteLine("Enter num. from 1 to 1 000 000");
            Container();
            foreach (int iw in optainer)
            {
                Console.WriteLine(iw);
            }

            // Expected: few numbers according to the condition; Real result: 1 
        
    ```
   

你在optainer中总是只有一个元素, 这一行是错误 optainer = new int[] { i }; 你总是创建一个只有一个项目的新数组,最后一个总是 1。

你可以这样改

static List<int> optainer = new List<int>();

        static void Main(string[] args)
        {
            Console.WriteLine("Enter num. from 1 to 1 000 000");
            Container();
            foreach (int iw in optainer)
            {
                Console.WriteLine(iw);
            }
        }

        static void Container()
        {
            uint numb = uint.Parse(Console.ReadLine());
            for (int i = 1000000; i >= 1; i--)
            {
                if (numb % i == 0)
                {
                    optainer.Add(i);
                }

            }
        }

我敢肯定有更性感的方式来做到这一点,但试试这个:

static void Container()
{
    uint numb = uint.Parse(Console.ReadLine());
    for (int i = 1000000; i >= 1; i--)
    {
        if (numb % i == 0)
        {
            int size = optainer.Length + 1;
            Array.Resize(ref optainer, size);
            optainer[size - 1] = i;
        }
    }
}

每次写

optainer = new int[] { i };

你创建了一个新的列表(你覆盖了旧的)你必须追加 到阵列。因此,您需要知道数组的大小。 为了节省内存,您应该使用更动态的东西,例如列表。

以下是如何添加值的说明: Adding values to a C# array