枚举组合,正确的方式 - vb.net [英] enum combination, correct way - vb.net
本文介绍了枚举组合,正确的方式 - vb.net的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
Public Enum TaskStatus
none = 0
完成= 2
执行= 4
已执行= 8
errors = 16''表示任务在执行某些操作时有一些错误
uploaded = 32
incomplete = 64'意味着任务被中止或进程停止在
结束枚举
一个功能正在处理任务另一个是检查其完成状态,如
私有函数Manage()
Dim ts As TaskStatus = TaskStatus .none
''执行任务
ts = TaskStatus.executing
''执行错误
ts = TaskStatus.errors或TaskStatus.executed
''任务上传
ts = ts或TaskStatus.uploaded
ts = ts或TaskStatus.completed
ts = TaskStatus.non e
CheckStatus(ts)
结束函数
私有函数CheckStatus(ByVal ts As TaskStatus)
'现在我想检查
如果ts和TaskStatus.uploaded或TaskStatus.errors)然后
这些(下面)中的哪一个是正确的
结束如果
如果ts =(TaskStatus.uploaded或TaskStatus.errors)然后
这些(上面一个)中哪一个是正确的
结束如果
如果ts和TaskStatus.incomplete然后
''是否正确的方式来检查不完整
结束If
如果ts和TaskStatus.completed然后
任务已完成
是正确的方式来检查任务完成
结束如果
结束函数
在函数CheckStatus中,我想知道使用枚举
组合?
解决方案
这是一个可能有助于一些想法的课程。请注意Enum上的附加枚举值all和flags属性。
公共类StatusTask
< Flags> _
公开枚举TaskStatus
无= 0
已完成= 2
执行= 4
已执行= 8
errors = 16''意味着任务有一些错误在执行某些操作
已上传= 32
不完全= 64表示任务被中止或进程停止在
全部= -1
结束枚举
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或aStatus
End Sub
Public Sub ClearStatus(aStatus As TaskStatus)
Me.ThisStatus = Me .ThisStatus And(aStatus Xor TaskStatus.all)
End Sub
公共函数HasStatus(aStatus As TaskStatus)As Boolean
''如果HasFlag未找到使用
' 回来(Me.Thi sStatus和aStatus)= aStatus
返回Me.ThisStatus.HasFlag(aStatus)
结束函数
结束类
和一些用法
Dim foo As New StatusTask
/ pre>
'设置一些状态
foo.SetStatus(StatusTask.TaskStatus.completed)
foo.AddStatus(StatusTask.TaskStatus.executed)
foo.AddStatus(StatusTask.TaskStatus.incomplete或StatusTask.TaskStatus。上传)
Debug.WriteLine(foo.ThisStatus)
'做一些检查
'单
如果foo.HasStatus(StatusTask.TaskStatus.completed)然后
Stop
End If
'multiple(both must be set)
如果foo.HasStatus(StatusTask.TaskStatus.completed)AndAlso foo.HasStatus(StatusTask.TaskStatus.incomplete )然后
Stop
End If
'multiple(both must be set)alternative
如果foo.HasStatus(StatusTask.TaskStatus.completed或StatusTask.TaskStatus.executed)Then
Stop
End If
'multiple(any set)
如果foo.HasStatus(StatusTask.TaskStatus.errors)OrElse foo.HasStatus(StatusTask.TaskStatus.incomplete )然后
停止
结束如果
'清除状态
foo.ClearStatus(StatusTask.TaskStatus.errors)'错误未设置
Debug.WriteLine( foo.ThisStatus)
foo.ClearStatus(StatusTask.TaskStatus.completed或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)
I have a project in Vb.net and windows form application with dotnet framework 3.5. I am using Emum for storing and processing tasks As :
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
One function is processing the task and the other one is Checking its completion status, as
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
In the Function CheckStatus, i want to know the correct way to manipulate with
enum
combinations?解决方案Here is a class that might help with some ideas. Note the additional enum value all and the flags attribute on the Enum.
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
and some usage
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)
这篇关于枚举组合,正确的方式 - vb.net的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文