C# - 代码没有运行,我不知道为啥
Posted
技术标签:
【中文标题】C# - 代码没有运行,我不知道为啥【英文标题】:C# - Code not running and I can't figure out whyC# - 代码没有运行,我不知道为什么 【发布时间】:2017-04-01 03:24:11 【问题描述】:我目前正在使用 Discord.NET 创建一个 Discord 机器人,但我认为这在这里并不重要,我正在尝试对字典进行一些检查,但我遇到了一些代码没有的问题t运行,我可以找出原因。让我试着总结一下代码。
private Dictionary<Server, Dictionary<User, ChatterBotSession>> sessions = new Dictionary<Server, Dictionary<User, ChatterBotSession>>();
if (sessions.Any())
if (sessions[e.Server].Any())
await e.Channel.SendMessage("Sorry, I'm already talking to someone on this server.").ConfigureAwait(false);
return;
ChatterBotFactory factory = new ChatterBotFactory();
ChatterBot.ChatterBot bot = factory.Create();
ChatterBotSession session = bot.CreateSession();
Dictionary<User, ChatterBotSession> sessionDic = new Dictionary<User, ChatterBotSession>();
sessionDic.Add(e.User, session);
sessions.Add(e.Server, sessionDic);
await e.Channel.SendMessage("Added dicionary entry with server '" + e.Server.Name + "' and user '" + e.User.Name + "'");
因此,当此代码首次执行时,它会通过并发送带有“await e.Channel.SendMessage(...);”的消息。如果我在同一个 Discord 服务器上执行此代码,它会识别字典中的服务器并在“已经与某人交谈”消息处停止。所以这一切都很好,花花公子。但是,如果我然后转到另一台服务器,它会通过“sessions.Any()”if 和“if(sessions[e.Server].Any())”,因为它不是那个服务器,所以它不会进入那个如果,但它就停止了!在我看来,如果它应该在“sessions.Any()”之外继续。
我在这里错过了什么?
【问题讨论】:
我看不出这怎么可能。您是否逐行执行此操作并看到它在不满足您的第二个 if 条件后立即从您的方法中返回? 我看不出你会进入 if 语句。使用该代码,当您点击 if 语句时,字典会话将为空。 @TeisLindemark 但是因为我确实进入了第一个 if 语句,所以它不是空的。这里的问题是,即使它没有命中任何内部的 if 语句,它也不会继续。它就停在那里。 @JᴀʏMᴇᴇ 我已经遍历了 Visual Studio 中带有断点的每一行,当它停止工作时,它就消失了。它进入 if 语句然后就消失了。 听起来像是无声的失败。尝试捕获该代码周围的任何异常 - 那里的断点以找出发生了什么。我只能想象e.Server
是原因
【参考方案1】:
我设法找到了解决方案。我收到了将其包装成 try and catch 的建议,但我发现密钥不存在。出于某种原因,它没有告诉我。所以我检查了密钥是否真的存在,我现在处理得更好了,所以其余的代码正在执行。
这是一些更新后的代码。
private Dictionary<Server, ChatSession> sessions = new Dictionary<Server, ChatSession>();
if (sessions.Any())
if (sessions.ContainsKey(e.Server))
if(sessions[e.Server].User == e.User)
await e.Channel.SendMessage(e.User.Mention + " I'm already talking to you! :P");
return;
else
await e.Channel.SendMessage(e.User.Mention + " I'm already talking to someone here. Try again later.");
return;
else
await e.Channel.SendMessage("This server is not stored, continuing.");
【讨论】:
以上是关于C# - 代码没有运行,我不知道为啥的主要内容,如果未能解决你的问题,请参考以下文章