簡體   English   中英

如何使用 foreach 將輸入值存儲在數組中?

[英]How do I store an input value in an array using foreach?

這可能是一個簡單的,但作為一個初學者,我目前被卡住了。 我試過tempArray[i] = inputTemp; 但是在打印列表時似乎沒有正確存儲值。 有任何想法嗎?

        foreach (int i in tempArray)
        {
            Console.WriteLine("Enter a value");
            double inputTemp = Convert.ToDouble(Console.ReadLine());
            tempArray[i] = inputTemp;
        }
        // Print out the array
        foreach (double i in tempArray)
        {
            Console.WriteLine(i);
        }

它不起作用的原因是因為foreach循環遍歷tempArray中的值。 因此i不是索引,實際上是tempArray的值,在每次迭代中可能為 0,因為該數組尚未使用值初始化。

您想使用for來使i成為數組索引。

for (int i = 0; i < tempArray.Length; i++)
{
    Console.WriteLine("Enter a value");
    double inputTemp = Convert.ToDouble(Console.ReadLine());
    tempArray[i] = inputTemp;
}

在這種情況下,您需要使用for語句

for (var index = 0; index < tempArray.Length; index++)
{
    Console.WriteLine("Enter a value");
    double inputTemp = Convert.ToDouble(Console.ReadLine());
    tempArray[i] = inputTemp;
}

Foreach語句僅用於迭代IEnumerable 它從值存儲在數組中的事實中抽象出來,您不能從中修改底層數組。

從技術上講,您可以執行以下操作,但這違背了語言的設計,我永遠不會推薦它。 注意迭代變量item沒有被使用

// Don't use
foreach (var (index, item) in tempArray.Select((x, i) => (i, x)))
{
    tempArray[index] = whatever;
}

我同意@Marlon。 如果您想要更改較少的修復(盡管他的方法更好):您可以初始化一個索引變量,然后使用 foreach 循環(它遍歷數組中的值而不是索引)

    //this index variable can track the index being changed
    int index = 0;
    foreach (int i in tempArray)
    {
        Console.WriteLine("Enter a value");
        double inputTemp = Convert.ToDouble(Console.ReadLine());
        tempArray[index] = inputTemp;
        index++;
    }
    // Print out the array
    foreach (double i in tempArray)
    {
        Console.WriteLine(i);
    }

感謝您的回復。 因為我正在學習,所以我想比較 for 和 foreach 循環,看看我是否可以達到相同的結果。 並認為我在測試時錯過了 foreach 中的某些內容,但是。 從您的回答中,我了解到在這種情況下 foreach 並不是最佳的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM