枚举组合,正确的方式 - vb.net [英] enum combination, correct way - vb.net

查看:153
本文介绍了枚举组合,正确的方式 - vb.net的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Vb.net和Windows窗体应用程序中有一个项目,带有dotnet框架3.5。我正在使用Emum来存储和处理任务As:

  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 
'设置一些状态
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)
/ pre>

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆