繁体   English   中英

检查所有值列表是否在枚举C#中

[英]Check all list of values are in the enum c#

我有一个包含ID的整数列表

List<int> ids = new List<int>;

我在列表中添加值

list.Add(100);
list.Add(110);
list.Add(120);

我想检查列表中存在的所有值是否都在我的枚举中

public enum IdEnum
{
    IT= 100,
    Bank= 110,
    Insurance= 120,
 }

目前我正在使用

if (ids.Select(x => x).All(x => Enum.TryParse(x.ToString(), out IdEnum y)))
{
    //All the companies in the list are present in the enum
}
else
{
}

即使ID列表中的一家公司与枚举不同,它也应该位于其他公司中

在我的两种情况下,它都执行if语句。如果所有公司都与enum相同,或者某些公司与enum不同,则需要帮助吗?

Enum.TryParse对于任何数值返回true。 根据文档

如果value是不表示TEnum枚举的基础值的整数的字符串表示形式,则该方法返回一个枚举成员,该成员的基础值是将值转换为整数类型的值。 如果不希望出现这种情况,请调用IsDefined方法以确保整数的特定字符串表示形式实际上是TEnum的成员。

因此,按照建议,只需使用IsDefined

if (ids.All(x => Enum.IsDefined(typeof(IdEnum), x)))

您可以使用设置操作的Except而不是在枚举值中搜索每个id

var allIn = !ids.Except(Enum.GetValues(typeof(IdEnum)).Cast<int>()).Any();

当您使用Enum.IsDefined时,您Enum.IsDefined列表中的每个id做很多额外的工作-检查每个值是否为null,然后验证对象的类型为枚举,在检查了该值的类型之后,检查了枚举的基础类型,检索枚举值的数组,并执行值的二进制搜索。 对每个值都完成此操作。

另一方面,您只能一次获取所有枚举值,而无需另外检查值类型。 然后只需从ID列表中删除这些值,然后检查是否还有剩余。

if (ids.Select(x => x).All(x => Enum.IsDefined(typeof(IdEnum), x)))
{
    // All the companies in the list are present in the enum
}
else
{

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM