Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何解决“问题”;空指针异常";,当试图从IGuild获取IGuildUser时_C#_Discord.net - Fatal编程技术网

C# 如何解决“问题”;空指针异常";,当试图从IGuild获取IGuildUser时

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

我不知道我到底做错了什么

我试图检查用户是否在某个服务器上(通过UserID和ServerID),然后检查他的权限

使用DiscordSocketClient.GetGuild(serverid)后,我得到了一个IGuild(它不是null,我可以看到它的ID)。但是当我试图通过
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
returns
RanToCompletion
您不能简单地执行:-
public-IGuildUser-GetUserFromServer(ulong-userid,ulong-serverid){return\u-client.GetGuild(serverid)?.GetUser(userid);}