C# 如何解决“问题”;空指针异常";,当试图从IGuild获取IGuildUser时
我不知道我到底做错了什么 我试图检查用户是否在某个服务器上(通过UserID和ServerID),然后检查他的权限 使用DiscordSocketClient.GetGuild(serverid)后,我得到了一个IGuild(它不是null,我可以看到它的ID)。但是当我试图通过C# 如何解决“问题”;空指针异常";,当试图从IGuild获取IGuildUser时,c#,discord.net,C#,Discord.net,我不知道我到底做错了什么 我试图检查用户是否在某个服务器上(通过UserID和ServerID),然后检查他的权限 使用DiscordSocketClient.GetGuild(serverid)后,我得到了一个IGuild(它不是null,我可以看到它的ID)。但是当我试图通过IGuild.Users获取用户时,我得到一个空列表(IGuild.GetUserAsync()返回一个空Guiduser) 我必须先装上吗 public igilduser GetUserFromServer(ulon
IGuild.Users
获取用户时,我得到一个空列表(IGuild.GetUserAsync()
返回一个空Guiduser)
我必须先装上吗
public igilduser GetUserFromServer(ulong userid,ulong serverid){
IGuildUser gu=null;
试一试{
IGuild g=\u client.GetGuild(serverid);
控制台写入线(“Guidid:+g.Id”);
gu=g.GetUserAsync(userid).Result;
Console.WriteLine(“UserID:+gu.Id”);
}捕获(例外e){
控制台写入线(e.Message);
}
归顾;
}
编辑1:gu为空,并且
Task.Status
返回RanToCompletion
您拥有的代码可以编写如下
public igilduser GetUserFromServer(ulong userid,ulong serverid)
{
返回_client.GetGuild(serverid)?.GetUser(userid);
}
如果找不到给定id的帮会,请返回null,否则尝试检索用户。该方法要么返回null(如果找不到用户),要么将用户作为IGuildUser返回。有一种可能,用户实际上可能在公会中,但他们不在缓存中,在这种情况下,您可以回退到rest请求 公共异步任务GetUserFromServer(ulong userid,ulong serverid) { 返回_client.GetGuild(serverid)?.GetUser(userid)?wait _client.Rest.GetGuildUserAsync(serverid,userid); }
使用此选项,如果无法从缓存中检索用户,请执行rest请求以确认用户确实不是公会成员。您可以通过访问
DiscordSocketRestClient
来实现这一点,该客户端作为DiscordSocketClient
上的属性公开,这可能是因为没有具有该用户ID的用户吗?或者他们在不同的公会?只需先调用g.GetUserAsync(userid)而不使用。结果并检查您得到了什么。Task.Status
returnsRanToCompletion
您不能简单地执行:-public-IGuildUser-GetUserFromServer(ulong-userid,ulong-serverid){return\u-client.GetGuild(serverid)?.GetUser(userid);}