0

这就是我想出的代码

var roleMuted = ctx.Guild.GetRole(role id);
var userId = ctx.Message.MentionedUsers.First().Id;
DiscordMember member = ctx.Guild.GetMemberAsync(user); //exception here
await member.GrantRoleAsync(roleMuted);

它给了我一个例外

CS0029 无法将类型隐式转换"System.Threading.Tasks.Task< DSharpPlus.Entities.DiscordMember>""DSharpPlus.Entities.DiscordMember"

正如您在此处看到的那样-我在该行中的意图是创建一个类变量DiscordMember并将其设置DiscordMember为由返回 的变量ctx.Guild.GetMemberAsync(),但由于某种原因,Visual Studio告诉我DiscordMember返回的变量GetMemberAsync()DiscordMember我尝试的不同创建,以后使用 for .GrantRoleAsync(),这让我很困惑。

edit1** 我必须补充一点,如果我替换DiscordMember为该var

var member = ctx.Guild.GetMemberAsync(user); 然后我没有给我一个关于转换失败的异常,我根本无法调用变量.GrantRoleAsync()的方法member(异常 CS1061)

4

1 回答 1

0

GetMemberAsync是一种异步方法,您需要通过将await关键字放在它之前来等待它,就像您在下面使用GrantRoleAsync. 然后这将返回DiscordMember而不是Task<DiscordMember>.

至于你的编辑。您的类型现在是Task<DiscordMember>,这意味着您不会获得方法DiscordMember,而是获得方法Task<T>

于 2020-05-09T23:29:50.777 回答