我只想了解应该使用哪一个。
我有一个MessageListener,其中我有时会只获得一个项目,有时我可能会获得多个项目(最多可以发送200条消息)。
方法签名如下所示
public void OnMessage(Message[] messages)
我应该将每条消息添加到现有的消息数据中。消息存储在会话存储器中。
Dictionary<String,Message> existingMessages = (Dictionary<String,Message>)
Session.GetSessionData("key");
最好将Message一个一个地添加到现有的消息中,如下所示
foreach(Message msg in messages)
{
existingMessages.Add(msg);
}
Session.AddData("key",existingMessages);
创建地图并与现有地图合并是否更好
Dictionary<String,Message> newMap = new Dictionary<String,Message>();
foreach(Message msg in messages)
{
newMap.Add(msg);
}
//combine with existing data
existingMessages.union(newMap);
//put the data back in session memory
Session.AddData("key",existingMessages);
答案 0 :(得分:2)
如果您只想发送两者的组合,则无需修改其中任何一种的结构。这里LINQ类型的方法很好,因为它生成一个代理,代表一个集合的最终枚举,然后是另一个。
虽然因为这些都是字典,但将它们组合起来的想法有点困难。如果有重复键怎么办?你如何处理 - 谁优先?
如果您打算生成一系列KeyValuePair<string, Message>
,则重复的密钥不会导致任何问题。但如果情况确实如此,请记住Union()
可能没有达到您预期的效果 - 它只会追加第一组中找不到的元素。如果要联合KeyValuePair<T,V>
序列,它将使用ValueType.Equals作为相等比较器,它具有以下行为:
如果当前实例和obj的所有字段都不是引用类型,则Equals方法会对内存中的两个对象执行逐字节比较。否则,它使用反射来比较obj和此实例的相应字段。
您可能希望改为使用Concat
。