我有普查员
[Flags]
public enum ConversionResults
{
Added, Validated, ValidationFailed, Uploaded, Processing, Converted, ConversionFailed
}
也是对象列表。对象具有基于ConversionResults的Enum属性。
我正在尝试删除所有包含“ ConversionResults.Validated,ConversionResults.ValidationFailed,ConversionResults.Uploaded ”的对象,但代码不起作用,该对象不会被删除。
ConversionModelList.RemoveAll(p.Result.HasFlag(ConversionResults.Validated | ConversionResults.ValidationFailed | ConversionResults.Uploaded))
答案 0 :(得分:3)
您需要更改两件事。
首先,您需要重新定义枚举,如下所示:
[Flags]
public enum ConversionResults
{
Added = 1,
Validated = 2,
ValidationFailed = 4,
Uploaded = 8,
Processing = 16,
Converted = 32,
ConversionFailed = 64
}
[Flags]
属性本身不会将2的幂分配给枚举值(如果枚举值应该用作标志,则必须这样做);你还需要手动完成。属性(AFAIK)仅影响.ToString()
方法在用于返回枚举值的字符串表示时的工作方式。
其次,在.RemoveAll()
方法中,您的谓词需要像这样形成:
ConversionModelList.RemoveAll(p =>
p.Result.HasFlag(ConversionResults.Validated) |
p.Result.HasFlag(ConversionResults.ValidationFailed) |
p.Result.HasFlag(ConversionResults.Uploaded));
这将删除那些包含Validated
,ValidationFailed
和Uploaded
个标记的项目。
答案 1 :(得分:0)
您可以使用OR组合标记以匹配在一起。要确定给定标志是否与组合匹配,并将其与组合匹配,如果结果是相同的标志,则匹配。
var flagsToMatch = ConversionResults.Validated |
ConversionResults.ValidationFailed |
ConversionResults.Uploaded;
list.RemoveAll(p => p.Result == (p.Result & flagsToMatch));
HasFlag
方法有效,但在检查多个标志时会变得很长。