问题描述
我有一个名为流派的列表,我正在尝试删除用户将添加到其中的流派,无论大小写。我在代码中进一步指定了一个名为“genre”的字符串变量,但是当我尝试执行 RemoveAll() 命令时,我得到了 CS0176。这是正在播放的代码:
[Command("RemoveGenre")]
[Description("Remove a genre from the list of genres")]
public async Task Remove(CommandContext ctx,string genre)
{
if (genres.Contains(genre,StringComparer.OrdinalIgnoreCase))
{
var message = await ctx.RespondAsync($"Are you sure " + genre + " is correct?");
var yes = discordEmoji.FromName(ctx.Client,":white_check_mark:");
var no = discordEmoji.FromName(ctx.Client,":x:");
await message.CreateReactionAsync(yes);
await message.CreateReactionAsync(no);
var interactivity = ctx.Client.GetInteractivity();
var reactionResult = await interactivity.WaitForReactionAsync(x => x.Message == message,ctx.User,TimeSpan.FromSeconds(30)).ConfigureAwait(false);
while (!reactionResult.TimedOut)
{
if (reactionResult.Result.Emoji == yes)
{
genres.RemoveAll(n => n.Equals(genre,StringComparer.OrdinalIgnoreCase));
await ctx.Channel.SendMessageAsync("Removed " + genre + " from list. Genre list Now contains " + genres.Count.ToString() + " genres").ConfigureAwait(false);
break;
}
else if (reactionResult.Result.Emoji == no)
{
await Cancel(ctx);
break;
}
else
{
await ctx.Channel.SendMessageAsync($"Please use the emojis provided. Cancelled.");
break;
}
}
}
else
{
await ctx.Channel.SendMessageAsync("This genre doesn't exist in the list! nothing has been removed.").ConfigureAwait(false);
}
}
出现错误的部分是“n.Equals”部分,我不知道为什么。此外,字符串列表的流派。
如果有人能帮助我,那就太好了。提前致谢!
解决方法
试试这个:
if (reactionResult.Result.Emoji == yes)
{
genres.RemoveAll(n => string.Equals(n,genre,StringComparison.OrdinalIgnoreCase));
await ctx.Channel.SendMessageAsync("Removed " + genre + " from list. Genre list now contains " + genres.Count.ToString() + " genres").ConfigureAwait(false);
break;
}
检查 .net fiddle here 上的示例
编译器认为它正在使用 object.Equals
将 genre
与 StringComparer.OrdinalIgnoreCase
值进行比较,而不是您期望它执行的操作。