[英]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.