In Visual Basic worden enumeraties (Enum) gebruikt voor het declareren van benoembare gehele constanten, wat de leesbaarheid en onderhoudbaarheid van de code verhoogt. Enumeraties worden als volgt gedeclareerd:
Public Enum StatusCode Success = 0 Warning = 1 Error = 2 End Enum
Belangrijke nuances:
Voorbeeld van gebruik:
Dim code As StatusCode = StatusCode.Success If code = StatusCode.Error Then Console.WriteLine("Fout!") End If ' Toewijzing van een niet-bestaande waarde code = CType(5, StatusCode) ' Dit compileert, maar de waarde is niet gedefinieerd in de Enum
Is het mogelijk om een waarde toe te wijzen aan een variabele van het type Enum die niet in de Enum is vermeld? Hoe kan dat eindigen?
Ja, in Visual Basic (en .NET in het algemeen) kan een Enum-variabele elk geschikt (op basis van het onderliggende type) numeriek waarde worden toegewezen via expliciete conversie (
CType,DirectCast). Dit zal geen compilatiefout veroorzaken, maar kan leiden tot potentiële problemen bij verder gebruik, aangezien dergelijke waarden niet worden weergegeven met de namen van de Enum-elementen en niet correct kunnen worden geïnterpreteerd via methoden zoals ToString. Bijvoorbeeld:
Dim code As StatusCode = CType(42, StatusCode) Console.WriteLine(code) ' geeft '42' weer, niet de naam van het Enum-element
Verhaal
In een groot project stuurden ontwikkelaars statussen via WebAPI als int, en aan de clientzijde converteerden ze deze naar Enum. Toen er nieuwe waarden ontstonden, die niet aan de Enum waren toegevoegd, toonde de applicatie geen correcte informatie, omdat er geen controles op de "geldigheid" van de Enum-waarde ontbraken.
Verhaal
Het gebruik van Enum zonder Option Strict leidde ertoe dat willekeurige numerieke waarden, verkregen uit externe bronnen, impliciet naar Enum werden omgezet, wat bugs in de businesslogica veroorzaakte die moeilijk te traceren waren tijdens runtime.
Verhaal
Het ontbreken van een expliciete aanduiding van het basis-type van de Enum (bijvoorbeeld Byte voor geheugenbesparing) leidde tot onverwachte overloop van het gehele type in een smal microcontrolleroplossing op de Compact Framework.