繁体   English   中英

从列表中删除全部

[英]RemoveAll from List

我试图从列表中删除一些与特定条件匹配的项目,然后再将内容添加到ListBox。 我想要从列表中删除的(枚举)“ MediaState.Deleted”。

到目前为止,我已经尝试过:

//does not remove anything
        dbAssetList.RemoveAll(x => x.MediaState.Equals(6));     

    //Error on .equals which states that "Cannot access static method equals in non-static context"
        dbAssetList.RemoveAll(x => x.MediaState.Equals(typeof(MediaState),MediaState.Deleted));     

    //Error on .equals which states that "Cannot access static method equals in non-static context"    
        dbAssetList.RemoveAll(x => dbAssetList.Contains(x.MediaState.Equals(typeof(MediaState), MediaState.Deleted)));

我在做什么错了,如何删除列表中“ MediaState.Deleted”的项目

您的代码的第一个变体不会删除任何内容,因为Equals将始终返回false

根据该方法文档 ,返回值为:

如果obj是与此实例相同类型且具有相同基础值的枚举值,则为true否则为true 否则为false

如果将文字6传递给Equals ,则不满足true的条件,als 6的类型为int ,而不是MediaState类型。

编译器将其他两个变体解析为System.Object提供静态Equals方法 (因为它是带有两个参数的最近的Equals方法)。 编译器不会编译该代码,因为您没有在System.Object上调用静态方法,而是在键入其子类之一的引用上调用了该静态方法。 由于静态方法不是基于变量指向的当前类型解析的,而是在编译时解析的,因此此类调用将无法编译。

相反,只需使用

listBox.Items.Add(dbAssetList.Where(x => x.MediaState != MediaState.Deleted));

用于比较的==运算符与C#中的枚举值配合使用效果很好。

dbAssetList.RemoveAll(x => x.MediaState.Equals(MediaState.Deleted));

要么

dbAssetList.RemoveAll(x => x.MediaState == MediaState.Deleted);

.Equals(6)与列表中的任何项目都不匹配。 Equals的typeof()版本是静态的,不能在该上下文中使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM