簡體   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