我有一个场景,在一个连续运行的线程“计时器”调用我的函数“custommethod”。我无法控制系统代码,这只是为了演示系统如何工作,我甚至不知道用 系统代码 编写了什么代码。
系统代码
timer duration = 1000
void timer_elapsed()
{
foreach(string symbol in symbols) //symbol list may vary
{
custommethod(symbol);
}
}
结束系统代码
所以,我的方法“custommethod”只是定期从系统代码中获取一个参数。当用户添加或删除由系统代码处理的符号时,符号列表可能会有所不同。我得到的是周期性的活动符号。所以,我关心的是保留一个活动符号列表。
我的代码
function custommethod(string symbol)
{
//Check whether new symbol is added or a symbol is deleted
}
结束我的代码
这是我到目前为止所尝试的
HashTable ht=new HashTable();
function custommethod(string symbol)
{
//Check whether new symbol is added or a symbol is deleted
if(!ht.ContainsKey(symbol))
{
ht.Add(symbol,0); //New symbol added
}
//How will i come to know whether a symbol is deleted or not
}
答案 0 :(得分:1)
如果ht
与symbols
相同,那就不好了。永远不应该改变foreach
循环的来源。
如果是这种情况,你应该制作一个新的集合,然后用旧的集合替换它。
答案 1 :(得分:1)
我不会做“for each”方法,而是使用HashSet在新集和旧集之间进行比较(虽然大多数是Linq,所以HashTable可以没问题,IDK)
HashSet oldSet;//construct that correctly
HashSet newSet;//construct that correctly also
HashSet deletedSet = oldSet.Except(newSet);
HashSet addedSet = newSet.Except(oldSet);