2016-07-27 194 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 

如果您事先对列表进行排序,那么@拉胡尔的答案就是要走的路。

相关问题