成员 'object.equals(object?, object?' 不能通过实例引用访问;在列表删除 c# 中使用名称而不是字符串来质量它?

问题描述

我有一个名为流派的列表,我正在尝试删除用户添加到其中的流派,无论大小写。我在代码中进一步指定了一个名为“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.EqualsgenreStringComparer.OrdinalIgnoreCase 值进行比较,而不是您期望它执行的操作。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...