2016-07-27 193 views
-3

我需要查看列表並找到最大值和最小值。該列表根據用戶輸入的信息填入表單文本框中。然後每次我點擊一個按鈕來計算我的表單時,它會運行代碼進行計算並將小數點放入listProfit。 我已經看遍了所有地方,並嘗試使用.Sort(),但這會導致系統錯誤。C#從列表中獲取最小值和最大值

這是我得到的錯誤。

「System.InvalidOperationException」類型 的未處理的異常出現在mscorlib.dll其他信息:收集是 修改;枚舉操作可能不會執行。

錯誤突出顯示了我的foreach循環中的「in」。

//list of each order total 
List<decimal> listProfit = new List<decimal>(); 

    foreach(int item in listProfit) 
        { 
         listProfit.Sort(); 
         decimal smallest = listProfit[0]; 
         decimal largest = listProfit[listProfit.Count - 1]; 
         SmallTxt.Text = smallest.ToString("c"); 
         LargestTxt.Text = largest.ToString("c"); 
        } 
+5

爲什麼在每次迭代中對集合進行排序?這對我來說似乎是一個非常糟糕的主意。爲什麼你在排序後迭代?什麼是完整的堆棧跟蹤?請顯示[mcve] –

+3

.Min(),.Max()? –

+0

每次對列表進行排序,因爲每次運行計算時都會輸入新值。 –

回答

5

使用MinMax從System.Linq的:

var min = listProfit.Min(); 
var max = listProfit.Max(); 
+0

當我做你建議我收到和錯誤。 System.Core.dll 中發生未處理的異常類型'System.InvalidOperationException'附加信息:序列不包含元素 –

+1

@CodyMoser:根據您的代碼,您有一個空的列表。 *沒有*最小值或最大值。因爲根本沒有任何價值。 – David

4

你並不需要在所有的迭代。如果您想繼續對列表進行排序,您可以像下面這樣說。否則,請嘗試使用Min()Max() LINQ擴展方法得到那些直接

listProfit.Sort(); 
    decimal smallest = listProfit[0]; 
    decimal largest = listProfit[listProfit.Count - 1]; 
2

要得到最小值使用

SmallTxt.text = listProfit.Min().ToString("c"); 

要獲得最大

LargestTxt.Text = listProfit.Max().ToString("c"); 

無需排序列表,但請注意,這兩項操作都列舉了整個列表。

0

根據你的問題,我假設你是初學者。考慮KISS並考慮如何在沒有LINQ的情況下做到這一點。

// declare list 
var listProfit = new List<decimal>(); 
// populate list 
listProfit.Add(300.5m); //etc 

// initial values for min and max 
decimal min = Decimal.MaxValue; 
decimal max = Decimal.MinValue; 

// loop through the list 
for (int i = 0; i < listProfit.Count; i++) 
{ 
    // is the current item smaller than min? 
    if (listProfit[i] < min) 
     // if yes, set min to that value 
     min = listProfit[i]; 
    // is the current value greater than max? 
    if (listProfit[i] > max) 
     // if yes, set max to that value 
     max = listProfit[i]; 
} 

// you are now outside of the for loop, with your min and max values populated 

如果您事先對列表進行排序,那麼@拉胡爾的答案就是要走的路。

相關問題