0

在将内容添加到 ListBox 之前,我试图从 List 中删除与特定条件匹配的几个项目。我想要从列表中删除(枚举)“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”的项目

4

2 回答 2

3

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

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

trueifobj是与此实例具有相同类型和相同基础值的枚举值;否则,false

如果将文字传递6Equalstrue则不满足条件, als6是 type int,而不是 type MediaState

其他两个变体由编译器解析为由提供的静态Equals方法System.Object(因为它是Equals具有两个参数的最接近的方法)。编译器不会编译它,因为您没有在 上调用该静态方法System.Object,而是在类型为其中一个子类的引用上调用该静态方法。由于静态方法不是根据变量指向的当前类型解析的,而是在编译时,这样的调用不会编译。

相反,只需使用

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

==比较运算符适用于 C# 中的枚举值。

于 2013-06-23T14:28:14.290 回答
0
dbAssetList.RemoveAll(x => x.MediaState.Equals(MediaState.Deleted));

或者

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

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

于 2013-06-23T14:27:18.737 回答