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