【问题标题】:How to add elements to an arrayList everytime the timer tick in C#?每次 C# 中的计时器滴答时,如何将元素添加到 arrayList?
【发布时间】:2015-02-15 05:55:08
【问题描述】:

我有一个方法,每次计时器滴答时都会生成一个随机数(间隔:2s)

public static double RandomNumber(double min, double max)
{
  lock (synk)
  {
    return random.NextDouble() * (max - min) + min;
  }
}

我想将随机方法中的值添加到数组列表中,例如:

ArrayList list = new ArrayList();
list.Add(RandomNumber(double min, double max))
double totalSum = Sum(list);

Sum() 方法是:

private double Sum(ArrayList arr)
{
  double sum = 0;

  foreach (double i in arr)
  {
    sum = sum + i;
  }

  return sum;
}

但是当我检查列表的内容(在文本框中)时,每次只添加最后一个值。我无法将所有值添加到列表中。任何帮助将不胜感激,并在此先感谢您。

【问题讨论】:

  • 能否提供完整代码?您每次都在创建列表,这就是为什么它只有最后一个值
  • 另外,不要使用ArrayListList<double> 几乎在各个方面都出类拔萃。
  • 你真的需要这份清单吗?如果您只是要在每个计时器滴答时进行求和,只需将新值添加到单个 double 字段值即可。

标签: c# arraylist timer


【解决方案1】:

虽然我还没有看到完整的代码,但问题是每次计时器调用您的方法时,您都在创建 ArrayList。您应该在函数之外创建列表,以便保留这些值。

其次,最好将 List<T> 用作列表容器,因为它是强类型的,并且为您需要的操作提供 LINQ 支持(除非您使用的是旧的 .NET 版本)(如 Peter Duniho 所指出的可能是你甚至不需要整个列表?)。

考虑到以上几点,您的代码应如下所示:

private readonly List<double> _list = new List<double>(); 
//created and initialized outside of your function
public void CaylledByTimer()
{
   _list.Add(RandomNumber(min, max));
   double totalSum = _list.Sum(); //you can use built-in LINQ Sum function
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-26
    • 2013-10-15
    • 1970-01-01
    • 2021-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多