C# 从列表中删除

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

在将内容添加到列表框之前,我试图从列表中删除符合特定条件的几个项目。我想要从列表中删除(enum)“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(6)与列表中的任何项目都不匹配。Equals的typeof()版本是静态的,不能在该上下文中使用


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

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

根据,返回值为:

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

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

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

相反,只要使用

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

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

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

根据,返回值为:

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

如果将文本
6
传递给
Equals
,则
true
的条件不满足,als
6
的类型为
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));