For-each 标志(标志迭代)
在某些非常具体的场景中,我们认为需要对源枚举的每个标志执行特定操作。
我们可以编写一个简单的通用扩展方法来实现这个任务。
<DebuggerStepThrough>
<Extension>
<EditorBrowsable(EditorBrowsableState.Always)>
Public Sub ForEachFlag(Of T)(ByVal sender As [Enum],
ByVal action As Action(Of T))
For Each flag As T In sender.Flags(Of T)
action.Invoke(flag)
Next flag
End Sub
用法示例:
Dim flags As FileAttributes = (FileAttributes.ReadOnly Or FileAttributes.Hidden)
flags.ForEachFlag(Of FileAttributes)(
Sub(ByVal x As FileAttributes)
Console.WriteLine(x.ToString())
End Sub)