C# 从列表中删除
在将内容添加到列表框之前,我试图从列表中删除符合特定条件的几个项目。我想要从列表中删除(enum)“MediaState.Deleted”的任何内容 到目前为止,我已经尝试:C# 从列表中删除,c#,C#,在将内容添加到列表框之前,我试图从列表中删除符合特定条件的几个项目。我想要从列表中删除(enum)“MediaState.Deleted”的任何内容 到目前为止,我已经尝试: //does not remove anything dbAssetList.RemoveAll(x => x.MediaState.Equals(6)); //Error on .equals which states that "Cannot access static met
//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(6)与列表中的任何项目都不匹配。Equals的typeof()版本是静态的,不能在该上下文中使用
或
.Equals(6)与列表中的任何项目都不匹配。Equals的typeof()版本是静态的,不能在该上下文中使用。代码的第一个变体不会删除任何内容,因为
Equals
将始终返回false
:
根据,返回值为:
true
如果obj
是与此实例具有相同类型和相同基础值的枚举值;否则,false
如果将文本6
传递给Equals
,则true
的条件不满足,als6
的类型为int
,而不是MediaState
的类型
其他两个变量由编译器解析为(因为它是具有两个参数的最近的Equals
方法)。编译器不会编译它,因为您不会在System.Object
上调用该静态方法,而是在其子类之一的引用上调用该静态方法。由于静态方法不是基于变量指向的当前类型解析的,而是在编译时解析的,所以这样的调用不会编译
相反,只要使用
listBox.Items.Add(dbAssetList.Where(x => x.MediaState != MediaState.Deleted));
用于比较的
=
运算符与C#中的枚举值配合得很好。代码的第一个变量不会删除任何内容,因为Equals
将始终返回false
:
根据,返回值为:
true
如果obj
是与此实例具有相同类型和相同基础值的枚举值;否则,false
如果将文本6
传递给Equals
,则true
的条件不满足,als6
的类型为int
,而不是MediaState
的类型
其他两个变量由编译器解析为(因为它是具有两个参数的最近的Equals
方法)。编译器不会编译它,因为您不会在System.Object
上调用该静态方法,而是在其子类之一的引用上调用该静态方法。由于静态方法不是基于变量指向的当前类型解析的,而是在编译时解析的,所以这样的调用不会编译
相反,只要使用
listBox.Items.Add(dbAssetList.Where(x => x.MediaState != MediaState.Deleted));
用于比较的
=
运算符与C#中的枚举值配合得很好。您是否尝试过dbAssetList.RemoveAll(x=>x.MediaState==MediaState.Deleted)代码>?这可能与RemoveAll
无关,与比较枚举有关。与其在将内容添加到列表框之前从列表中删除项目,不如只添加所需的项目listBox.Items.Add(dbAssetList.Where(x=>x.MediaState!=MediaState.Deleted))代码>?@O.R.Mapper编号。。。这起作用了。有时候,最简单的解决办法是最难的。请添加作为答案,我将接受it@RogerLipscombe该列表是从一个更大的支持类创建和传递的,该类服务于其他代码,否则我会这样做。感谢您尝试了dbAssetList.RemoveAll(x=>x.MediaState==MediaState.Deleted)代码>?这可能与RemoveAll
无关,与比较枚举有关。与其在将内容添加到列表框之前从列表中删除项目,不如只添加所需的项目listBox.Items.Add(dbAssetList.Where(x=>x.MediaState!=MediaState.Deleted))代码>?@O.R.Mapper编号。。。这起作用了。有时候,最简单的解决办法是最难的。请添加作为答案,我将接受it@RogerLipscombe该列表是从一个更大的支持类创建和传递的,该类服务于其他代码,否则我会这样做。谢谢
listBox.Items.Add(dbAssetList.Where(x => x.MediaState != MediaState.Deleted));