在将内容添加到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“的项目?
发布于 2013-06-23 22:28:14
代码的第一个变体不会删除任何内容,因为Equals将始终返回false
根据docs of that method,返回值为:
如果obj是与此实例具有相同类型和相同基础值的枚举值,则为
true;否则为false。
如果将文字6传递给Equals,则不满足true的条件,即als 6的类型为int,而不是MediaState类型。
另外两个变体由编译器解析为static Equals method provided by System.Object (因为它是具有两个参数的最近的Equals方法)。编译器不会对此进行编译,因为您不会在System.Object上调用该静态方法,而是对其一个子类的类型引用进行编译。因为静态方法不是基于变量所指向的当前类型来解析的,而是在编译时解析的,所以这样的调用将不会编译。
相反,只需使用
listBox.Items.Add(dbAssetList.Where(x => x.MediaState != MediaState.Deleted));用于比较的==运算符可以很好地处理C#中的枚举值。
发布于 2013-06-23 22:27:19
dbAssetList.RemoveAll(x => x.MediaState.Equals(MediaState.Deleted));或
dbAssetList.RemoveAll(x => x.MediaState == MediaState.Deleted);.Equals(6)不会匹配列表中的任何项。Equals的typeof()版本是静态的,不能在该上下文中使用。
https://stackoverflow.com/questions/17261627
复制相似问题