那是我想出的代码
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
不同,以后再用于.GrantRoleAsync()
,这让我很困惑。
编辑1 **
而且我必须补充一点,如果我将DiscordMember
替换为var
,则该行将成为
var member = ctx.Guild.GetMemberAsync(user);
然后除了给我一个关于转换失败的例外以外,我根本无法为.GrantRoleAsync()
变量(CS1061例外)调用member
方法
答案 0 :(得分:0)
GetMemberAsync
是一种异步方法,您需要通过在其前面放置await
关键字来等待它,就像下面对GrantRoleAsync
所做的那样。然后,它将返回DiscordMember
而不是Task<DiscordMember>
。
至于您的编辑。您的类型现在为Task<DiscordMember>
,这意味着您将不会获得DiscordMember
的方法,而是会得到Task<T>
的方法