我有一個C#/。NET 4.0應用程序接收和分析網絡連接的一些數據。我需要解析的一個特定數據片段是一個表示一組標誌的UInt16值。我定義表示這些標誌像這樣的枚舉:使用Enum.HasFlag()檢查標誌的UInt16?
public enum Fields
{
None = 0,
FirstFlag = 1,
SecondFlag = 2,
ThirdFlag = 4,
FourthFlag = 8,
FifthFlag = 16,
SixthFlag = 32,
SeventhFlag = 64,
EighthFlag = 128
}
我要去嘗試使用位運算符這個UINT16值,以確定哪些標誌標明它已經成立。但後來我碰到了Enum.HasFlag()方法,乍一看,這似乎比按位操作更容易。我一直在嘗試使用下面的方法來確定哪些標誌在UINT16值設置:
public static void CheckForSetFields(Fields value)
{
if (value.HasFlag(Fields.None))
{
System.Diagnostics.Debug.WriteLine("No fields are set!");
}
else
{
if (value.HasFlag(Fields.FirstFlag))
{
System.Diagnostics.Debug.WriteLine("First flag is set.");
}
if (value.HasFlag(Fields.SecondFlag))
{
System.Diagnostics.Debug.WriteLine("Second flag is set.");
}
// etc., etc.
if (value.HasFlag(Fields.EighthFlag))
{
System.Diagnostics.Debug.WriteLine("Eighth flag is set.");
}
}
}
這種方法顯然需要類型的字段(我的枚舉),但我有UINT16值的工作參數那是發給我的。我假設我需要將UInt16轉換爲Fields枚舉的實例,但我不知道如何做到這一點。它看起來並不像僅僅投射它那麼簡單(它不會給我一個錯誤,但也不會返回預期的結果)。是否有可能使用Enum.HasFlag()做到這一點,或者我應該只是實施按位操作並完成它?
您的預期結果是什麼? – brz 2014-09-04 19:10:25