【发布时间】:2012-02-27 11:39:35
【问题描述】:
private void GoogleTalkClient_OnMessage(object sender, jabber.protocol.client.Message msg)
{
connectionsNumber.Maximum = rosterManager.Count;
if (session.Keys.Contains<string>(msg.From.Bare)){
session.TryGetValue(msg.From.Bare,out thissession);
}else{
if (cleverbot.Keys.Contains<string>(msg.From.Bare)){
cleverbot.TryGetValue(msg.From.Bare,out bot);
}else{
bot = factory.Create(ChatterBotType.CLEVERBOT);
if (bot != null)
cleverbot.Add(msg.From.Bare, bot);
}
thissession = bot.CreateSession();
if (thissession != null)
session.Add(msg.From.Bare, thissession);
}
connectionsNumber.Value = session.Count;
jabber.protocol.client.Message reply = new jabber.protocol.client.Message(GoogleTalkClient.Document);
reply.Body = thissession.Think(Grammarcheck(msg.Body));
reply.To = msg.From;
GoogleTalkClient.Write(reply);
}
代码是 C#,它给我所有 session.Add() 和cleverbot.Add() 语句的空引用错误,我不知道为什么(cleverbot 和 session 是字典)
【问题讨论】:
-
要么您忘记初始化
cleverbot和session,要么您传入的数据为空。使用调试器单步调试代码,看看它是什么。 -
您是否正确初始化了字典?仅从那段代码来看,一个可能的解决方案不能说太多。
-
您必须使用
Dictionary<string,Session> session = new Dictionary<string,Session>();和Dictionary<string,CleverBot> clerverbot = new Dictionary<string,CleverBot>();初始化它们。这个Dictionary<string,Session> session;单独不会创建字典,它将为空。 -
是的,数据不为空,我用调试器检查过。
-
那么键为空(
msg.From.Bare == null)或msg为空或msg.From为空。
标签: c# .net dictionary xmpp nullreferenceexception