成员';无法使用实例引用访问object.equals(object?、object?');请在列表删除c#中的字符串上使用名称对其进行质量评定?
我有一个名为genres的列表,我正在尝试删除用户将添加到其中的一个类型,不管大小写如何。我在代码中进一步指定了一个名为“genre”的字符串变量,但当我尝试执行RemoveAll()命令时,我得到了CS0176。下面是一些正在播放的代码:成员';无法使用实例引用访问object.equals(object?、object?');请在列表删除c#中的字符串上使用名称对其进行质量评定?,c#,string,list,removeall,remove,C#,String,List,Removeall,Remove,我有一个名为genres的列表,我正在尝试删除用户将添加到其中的一个类型,不管大小写如何。我在代码中进一步指定了一个名为“genre”的字符串变量,但当我尝试执行RemoveAll()命令时,我得到了CS0176。下面是一些正在播放的代码: [命令(“RemoveGenre”)] [说明(“从流派列表中删除流派”)] 公共异步任务删除(CommandContext ctx,字符串类型) { if(genres.Contains(genre,StringComparer.OrdinalIgnore
[命令(“RemoveGenre”)]
[说明(“从流派列表中删除流派”)]
公共异步任务删除(CommandContext ctx,字符串类型)
{
if(genres.Contains(genre,StringComparer.OrdinalIgnoreCase))
{
var message=wait ctx.RespondAsync($“您确定”+genre+“正确吗?”);
var yes=DiscordEmoji.FromName(ctx.Client,“:白色复选标记:”);
var no=DiscordEmoji.FromName(ctx.Client,“:x:”);
等待消息。CreateReactionSync(是);
等待消息。CreateReactionSync(否);
var interactivity=ctx.Client.GetInteractivity();
var reactionResult=wait interactivity.waitforreactionsync(x=>x.Message==Message,ctx.User,TimeSpan.FromSeconds(30)).configurewait(false);
而(!reactionResult.TimedOut)
{
if(reactionResult.Result.Emoji==yes)
{
RemoveAll(n=>n.Equals(genre,StringComparer.OrdinalIgnoreCase));
wait ctx.Channel.SendMessageAsync(“从列表中删除了“+genre+”。流派列表现在包含“+genres.Count.ToString()+”genres”)。configurewait(false);
打破
}
else if(reactionResult.Result.Emoji==否)
{
等待取消(ctx);
打破
}
其他的
{
等待ctx.Channel.SendMessageAsync($“请使用提供的表情符号。已取消”);
打破
}
}
}
其他的
{
wait ctx.Channel.SendMessageAsync(“列表中不存在此类型!未删除任何内容”)。configurewait(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;
}
检查.NETFiddle上的示例
编译器认为它正在使用对象.Equals
来比较类型
与StringComparer.OrdinalingOrecase
值,而不是您期望它做的事情。尝试如下:
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;
}
检查.NETFiddle上的示例
编译器认为它正在使用
对象.Equals
来比较类型
与StringComparer.OrdinalingOrecase
值,而不是你期望它做什么。类型的定义是什么?它是静态的吗?它不是静态的,是我在异步任务中设置的变量之一。“公共异步任务删除(CommandContext ctx,字符串类型)”。@Komsur:这就是为什么它有助于显示a-所以我们不需要猜测这类事情…同样地,我们不知道类型的。这是一个字符串列表。@Komsur:但是,如果你在a中显示,我们也不必问。你现在得到的更好(因为它显示了类型
),但它仍然是不完整的,而且也不是最小的。请阅读以获得关于如何提出真正好的问题的建议。(这需要一些时间,但老实说,从长远来看是值得的。)“类型”的定义是什么?它是静态的吗?它不是静态的,是我在异步任务中设置的变量之一。”public async Task Remove(CommandContext ctx,string-genre)”。@Komsur:这就是为什么它有助于显示a-所以我们不需要猜测这类事情……同样,我们也不知道类型。这是一个字符串列表。@Komsur:但是,如果你在a中显示了这一点,我们就不用问了。你现在得到的更好(因为它显示了类型
),但它仍然是不完整的,而且也不是最小的。请阅读以获取关于如何提出真正好的问题的建议。(这需要一些时间,但老实说,从长远来看是值得的。)这导致CS1503:“无法从System.StringComparer转换为System.StringComparation“.是的,我修复了它,现在应该可以正常工作了。您需要使用StringComparison.OrdinalingOrecase
。还有一个网络小提琴来检查它。是的,修复了!我接受这个作为答案。谢谢!这导致CS1503:“无法从System.StringComparier转换为System.StringComparison”是的,我已经修好了,现在应该可以正常工作了。你需要使用StringComparison.OrdinalingOrecase
。还有一个网络提琴来检查它。是的,修好了!我接受这个作为答案。谢谢!