2012-08-11 56 views
4

考慮FileAttributes枚舉,它是爲按位操作而設計的。我創建了一個系統,用戶在其中選擇一些複選框來確定文件的狀態。一個文件可能是ReadOnlySystem。因此,該值將是5(1代表ReadOnly,4個四個System)。如何有效地驗證表示標記的枚舉的整數?

如何驗證整數是否爲有效的FileAttributes枚舉?

我見過這些問題,但他們沒有幫助我,因爲他們不適合bitwised(標記,組合)的值。

Check that integer type belongs to enum member
Is there a way to check if int is legal enum in C#?

+1

如果**標誌的任意組合**是有效的,你可以簡單地檢查每一位在'enum'值設置爲1,是一個有效的'enum'項目(用一個簡單的'for'和按位與)。 – 2012-08-11 08:41:57

+0

如果你需要一個這樣的例子,只需查看'Enum.InternalFlagsFormat()'方法的源代碼(你不會建立一個字符串,但你會檢查該值是否有效)。 – 2012-08-11 08:47:24

+0

如果因爲任何原因,這個枚舉不是很好的設計?例如它沒有'1'?在這種情況下,5返回true,而1不存在。 – 2012-08-11 08:49:27

回答

5
  • 計算累積的按位 「或」 在所有合法值(可能使用Enum.GetValues)
  • 計算 「測試值&〜allValues」
  • 如果是非零,那麼就不可能通過合法合法的標誌形成你當前的價值
+0

+1不能更清晰! – 2012-08-11 09:00:00

+0

那是'〜'負運算符@Marc嗎? – 2012-08-11 09:05:51

+0

@SaeedNeamati按位「不」/「補充」 – 2012-08-11 09:10:29

2

這將工作。基本上,如果枚舉組合無效,ToString()將返回該數字。

private bool CombinationValidForFileAttributes(int value) 
{ 
    return ((FileAttributes)value).ToString() != value.ToString(); 
}