【问题标题】:How can i check if a List<string> have been changed?如何检查 List<string> 是否已更改?
【发布时间】:2014-06-22 18:28:24
【问题描述】:

我有一个每 X 秒更新一次的列表。 我想每 X 秒知道一个新项目是否已添加到列表中,以及这些项目是什么。

例如我在列表中:

index 0 : this is a test
Index 1 : this is number one

然后在 X 秒后添加了一个新项目:

index 0 : this is a test
Index 1 : this is number one
Index 2 : Im a new item

我想要做的是检查任何新项目,它可以是 X 秒后的一个项目或 20 个项目,并且所有这些项目都应该添加到列表的顶部。所以每次最后一个项目都会是第一个。 如果只添加了一个项目,如果添加了 20 个项目,他将是第一个,那么第 20 个项目将是列表中的第一个,20 个项目中的第 1 个将位于第 20 个。

我以前问过,但现在我知道我需要什么了。

而且仅仅做 inser(0,...) 是不好的。

newText.Add(t[i]);
newText.Add(dateTime[i]);
newText.Add(string.Empty);

如果我在做 newText.Insert(0,t[i]);它以后不会显示任何东西。 如果我使用 Insert 属性,它不会像我想要的那样构建列表,它会在最后添加所有日期和时间以及空行......

这就是我没有使用 Insert 的原因。

编辑

我忘了说我需要保持 List 格式:

newText.Add(t[i]);
newText.Add(dateTime[i]);
newText.Add(string.Empty);

当我指最后一项时,我指的是最后 3 个索引。 List 中的每 3 个索引就像一个组/块。 List 格式是这样的:

索引 0 文本:你好世界 索引 1 日期和时间:22/6/2014 索引 2 空格/空行:

所以当我的意思是移动到列表顶部的最后一项时,我的意思是,例如索引 28 将位于索引 0,然后索引 29 位于索引 1,索引 30 位于索引 2。 由于在索引 28 中我有一个文本索引 29 日期和时间和索引 30 空行。

这是列表的样子:

【问题讨论】:

  • 如果您希望最后添加的项目在前,请考虑使用Stack&lt;T&gt; 而不是List&lt;T&gt;
  • 您可以构建自己的列表结构来提供事件或重载现有的。
  • BindingList 和 ObservableCollection 都有事件让你知道列表何时发生变化
  • 如果它必须是一个列表,您可以将 list.Length 的结果保存为一个整数,并在 20 秒后检查 list.Length 是否仍然等于该整数。如果不是,则从 .Length 值中减去整数值。由于保证 List 是有序的,因此最新的项目将始终排在最后。
  • 抱歉更新了我的问题。忘记了最重要的是保持列表格式,当我的意思是最后一个项目时,我的意思是最后 3 个索引(项目/块/组都相互连接)。所以他们都需要向上移动。每次添加一个新项目(3 个索引)时,它们都需要像我在问题编辑部分中解释的那样位于顶部。

标签: c# .net winforms


【解决方案1】:

使用ObservableCollection&lt;T&gt;怎么样?

http://msdn.microsoft.com/library/ms668604(v=vs.110).aspx

这样你就可以实时监控列表了。

还有什么可能,监控 CollectionChanged 事件并将其收集到第二个列表中,您每 20 秒清除一次

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    相关资源
    最近更新 更多