Domanda

C'è un modo per combinare Enumerazioni in VB.net?

È stato utile?

Soluzione

Credo che quello che vuoi sia un'enumerazione di tipo flag.

Devi aggiungere l'attributo Flags all'inizio dell'enumerazione, quindi puoi combinare le enumerazioni con la parola chiave "Or".

Come questo:

<Flags()> _
Enum CombinationEnums As Integer
  HasButton = 1
  TitleBar = 2
  ReadOnly = 4
  ETC = 8
End Enum

Nota: I numeri a destra sono sempre due volte più grandi (potenze di 2): ciò è necessario per poter separare i singoli flag impostati.

Combina i flag desiderati utilizzando la parola chiave Or:

Dim settings As CombinationEnums
settings = CombinationEnums.TitleBar Or CombinationEnums.Readonly

Questo imposta TitleBar e Readonly nell'enumerazione

Per verificare cosa è stato impostato:

If (settings And CombinationEnums.TitleBar) = CombinationEnums.TitleBar Then
  Window.TitleBar = True
End If

Altri suggerimenti

Puoi utilizzare FlagsAttribute per decorare un Enum in questo modo che ti consentirà di combinare l'Enum:

<FlagsAttribute> _
Public Enumeration SecurityRights
None = 0
Read = 1
Write = 2
Execute = 4

E poi chiamarli così (classe UserPriviltes):

Public Sub New ( _
    options As SecurityRights _
)

New UserPrivileges(SecurityRights.Read OR SecurityRights.Execute)

Vengono effettivamente combinati (matematica dei bit) in modo che l'utente di cui sopra abbia sia la lettura che l'esecuzione trasportati in un'unica variabile Security Rights.

Per verificare se l'utente ha un privilegio, utilizza AND (più matematica bit per bit) per controllare il valore enum degli utenti con il valore Enum che stai controllando:

//Check to see if user has Write rights
If (user.Privileges And SecurityRights.Write = SecurityRigths.Write) Then
    //Do something clever...
Else
    //Tell user he can't write.
End If

Hth, Tyler

Se ho capito bene la tua domanda, vuoi combinare diversi tipi di enumerazione.Quindi una variabile può memorizzare un valore da una delle due diverse enumerazioni, giusto?Se stai chiedendo di memorizzare combinando due valori diversi di un tipo enum, puoi guardare la spiegazione di Dave Arkell

Le enumerazioni sono solo numeri interi con un po' di zucchero sintattico.Quindi, se ti assicuri che non ci siano sovrapposizioni, puoi combinarli trasmettendoli a int.

Tuttavia non sarà un bel codice.Cerco di evitare di utilizzare enumerazioni per la maggior parte del tempo.Di solito, se lasci che le enumerazioni si riproducano nel tuo codice, è solo questione di tempo prima che diano vita a ripetute dichiarazioni di maiuscole e minuscole e altri antipattern disordinati.

La chiave della combinazione Enums serve per assicurarsi che il valore sia una potenza di due (1, 2, 4, 8, ecc.) in modo da poter eseguire operazioni bit su di essi (|= &=).Quelli Enums può essere taggato con a Flags attributo.IL Anchor La proprietà sui controlli Windows Form è un esempio di tale controllo.Se è contrassegnato come flag, Visual Studio ti consentirà di controllare i valori invece di selezionarne uno singolo in un elenco a discesa nella finestra di progettazione delle proprietà.

Se stai pensando di usare enum flags() c'è un buon articolo Qui.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top