[英]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.