1

我有一个场景,在一个连续运行的线程中,“定时器”调用我的函数“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
    }
4

2 回答 2

1

如果ht是一样的symbols,那就不好了。永远不应该改变foreach循环的来源。

如果是这种情况,您应该制作一个新系列,然后用旧系列替换它。

于 2013-05-29T15:43:50.787 回答
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);
于 2013-05-29T15:48:15.647 回答