[英]enum combination, correct way - vb.net
我在Vb.net中有一個項目,並在Windows窗體應用程序中使用了dotnet framework 3.5。 我正在使用Emum存儲和處理任務,如:
Public Enum TaskStatus
none = 0
completed = 2
executing = 4
executed = 8
errors = 16 '' Means task got some error in performing some operations
uploaded = 32
incomplete = 64 '' Means Task Was Aborted or Process Stopped in between
End Enum
一種功能是處理任務,另一種功能是檢查其完成狀態,如下
Private Function Manage()
Dim ts As TaskStatus = TaskStatus.none
'' Performing Tasks
ts = TaskStatus.executing
'' Task Performed with Error
ts = TaskStatus.errors Or TaskStatus.executed
'' Task Uploading
ts = ts Or TaskStatus.uploaded
ts = ts Or TaskStatus.completed
ts = TaskStatus.none
CheckStatus(ts)
End Function
Private Function CheckStatus(ByVal ts As TaskStatus)
' Now i Want to check
If ts And (TaskStatus.uploaded Or TaskStatus.errors) Then
'' Which one of these(Below) is Correct
End If
If ts = (TaskStatus.uploaded Or TaskStatus.errors) Then
'' Which one of these(Above one) is Correct
End If
If ts And TaskStatus.incomplete Then
'' Is it Correct way to check for incompletion
End If
If ts And TaskStatus.completed Then
'' Task is Completed
'' Is is correct way to check Task Completed
End If
End Function
在功能CheckStatus中,我想知道使用enum
組合進行操作的正確方法嗎?
這是一門可以幫助您提出一些想法的課程。 注意附加枚舉值all和Enum的flags屬性。
Public Class StatusTask
<Flags> _
Public Enum TaskStatus
none = 0
completed = 2
executing = 4
executed = 8
errors = 16 '' Means task got some error in performing some operations
uploaded = 32
incomplete = 64 '' Means Task Was Aborted or Process Stopped in between
all = -1
End Enum
Public ThisStatus As TaskStatus = TaskStatus.none
Public Sub SetStatus(aStatus As TaskStatus)
Me.ThisStatus = aStatus
End Sub
Public Sub AddStatus(aStatus As TaskStatus)
Me.ThisStatus = Me.ThisStatus Or aStatus
End Sub
Public Sub ClearStatus(aStatus As TaskStatus)
Me.ThisStatus = Me.ThisStatus And (aStatus Xor TaskStatus.all)
End Sub
Public Function HasStatus(aStatus As TaskStatus) As Boolean
''if HasFlag not found use
''Return (Me.ThisStatus And aStatus) = aStatus
Return Me.ThisStatus.HasFlag(aStatus)
End Function
End Class
和一些用法
Dim foo As New StatusTask
'set some status
foo.SetStatus(StatusTask.TaskStatus.completed)
foo.AddStatus(StatusTask.TaskStatus.executed)
foo.AddStatus(StatusTask.TaskStatus.incomplete Or StatusTask.TaskStatus.uploaded)
Debug.WriteLine(foo.ThisStatus)
'do some checks
'single
If foo.HasStatus(StatusTask.TaskStatus.completed) Then
Stop
End If
'multiple(both must be set)
If foo.HasStatus(StatusTask.TaskStatus.completed) AndAlso foo.HasStatus(StatusTask.TaskStatus.incomplete) Then
Stop
End If
'multiple(both must be set) alternative
If foo.HasStatus(StatusTask.TaskStatus.completed Or StatusTask.TaskStatus.executed) Then
Stop
End If
'multiple(either set)
If foo.HasStatus(StatusTask.TaskStatus.errors) OrElse foo.HasStatus(StatusTask.TaskStatus.incomplete) Then
Stop
End If
'clear status
foo.ClearStatus(StatusTask.TaskStatus.errors) 'errors not set
Debug.WriteLine(foo.ThisStatus)
foo.ClearStatus(StatusTask.TaskStatus.completed Or StatusTask.TaskStatus.uploaded)
Debug.WriteLine(foo.ThisStatus)
foo.ClearStatus(StatusTask.TaskStatus.incomplete)
Debug.WriteLine(foo.ThisStatus)
foo.ClearStatus(StatusTask.TaskStatus.all)
Debug.WriteLine(foo.ThisStatus)
我會說您在這里所做的工作是一種非常好的方法,但是如果您想檢查使用or
正確方法,建議將它們分成不同的if語句。
最重要的是,我還建議彼此之間使用elseif
代替普通的if
語句,以節省一些時間和資源:)
這是我的方法:
Private Function CheckStatus(ByVal ts As TaskStatus)
' Now i Want to check
If ts = TaskStatus.uploaded Then
'Uploaded
Elseif ts = TaskStatus.errors Then
'Error
Elseif ts = TaskStatus.incomplete Then
'Incomplete
Elseif ts = TaskStatus.completed Then
' Task is Completed
End If
End Function
這只是我做事的簡要速覽,但是如果我看錯了什么,請告訴我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.