Für mich nachvollziehbare Fehlermeldung im ENUM-Zusammenhang

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von VB1963.

    Für mich nachvollziehbare Fehlermeldung im ENUM-Zusammenhang

    Moin!

    normalerweise hinterlege ich im Code immer die Stelle wo ich die Stelle gefunden habe - hier ware vermutlich irgendwo hier im Forum.

    Vielleicht kann mir aber einer bei meiner Fehlersuche weiterhelfen. Ich steht im dunkeln.

    Ich habe ein ENUM

    VB.NET-Quellcode

    1. ''' <summary>
    2. ''' VermessungsCode - siehe EBL_PKT_CODE_TBD
    3. ''' </summary>
    4. Public Enum VermCode As Long
    5. undefiniert = -1 ' von der Programmierung ergänzt
    6. Schachtdeckel = 1
    7. SchachtHauptpunkt = 2
    8. Rohrsohle = 3
    9. Schachtform = 4
    10. ÄußererAbsturz = 5
    11. EinAuslauf = 6
    12. TopPunkt = 7
    13. Straßenablauf_seitl = 8
    14. Leitungsschilder = 9
    15. Leitungspunkt = 10
    16. Schieberkappe = 11
    17. Spülvorrichtung = 12
    18. SonderPunktBodemann = 13
    19. RohrOK = 14
    20. Entlüftungshutze = 15
    21. Straßenablauf_mittig = 16
    22. Rinne = 17
    23. Schachtklappe = 18
    24. PunktohneBedeutung = 20
    25. Regenfallrohr = 21
    26. BWKPunkt = 22
    27. SchaltkastenAbwasser = 23
    28. HASohle = 25
    29. OKKL = 26 'OK Anschlusssohle
    30. OKBO = 27
    31. G_SO = 28 'Gully-Sohle
    32. RohrsohleVerschlossen = 24
    33. LP_OK = 31 'OK Rohr
    34. LP_GE = 32 'Gelände
    35. Festpunkt = 50
    36. Unbekannt = 99
    37. End Enum


    Dann gibt es da diese Funktion:

    VB.NET-Quellcode

    1. ''' <summary>
    2. ''' ermittelt den Punktcode für das Vermessungsobjekt
    3. ''' </summary>
    4. ''' <returns>VermCode als ENUM</returns>
    5. Public Function GetVermPktCode() As Integer
    6. Dim myEnum As EBL.Global.TBD.VermCode = EBL.Global.TBD.VermCode.undefiniert
    7. If [Enum].IsDefined(GetType(EBL.Global.TBD.VermCode), _Verm_ID_CODE) Then 'Prüfe ob der Wert ein Enum ist
    8. myEnum = CType(_Verm_ID_CODE, EBL.Global.TBD.VermCode) 'Enum aus Wert
    9. End If
    10. Return myEnum
    11. End Function


    In Zeile 7 bekomme ich folgende Fehlermeldung:

    System.ArgumentException: Der der Enumeration zugrunde liegende Typ und das Objekt müssen den gleichen Typ haben, oder das Objekt muss eine Zeichenfolge sein. Der übergebene Typ war "System.Int32", und der der Enumeration zugrunde liegende Typ war "System.Int64".
    bei System.RuntimeType.IsEnumDefined(Object value)
    bei EBL.MapService.MapVerm2Bestand.GetVermPktCode() in C:\VSProjects\2022\EBL.MapService\EBL.MapService\cls_MapVerm2Bestand.vb:Zeile 849.
    bei EBL.Bearbeiten.Siel.CreateAwElementeFromVermPkte.CreateAWElementFromVermPkt(KlassifizierungAwElement Klassifizierung) in C:\VSProjects\2022\EBL.Bearbeiten.Siel\EBL.Bearbeiten.Siel\cls_BearbeitenSiel_CreateAwElementeFromVermPkte.vb:Zeile 225.


    Die Zeile 849 ist in meinem Auszug die Zeile 7.

    Die Werte sind folgende:
    _Verm_ID_CODE = -1

    Kann mir einer weiterhelfen?

    Gruß Jan
    Was ist _Verm_ID_CODE und welchen Datentyp hat es? Ich tippe auf Integer (alias Int32). Wäre es Long, würde der Code an der Stelle funktionieren.

    Mit Option Strict On würde dieser Code aber noch nicht mal kompilieren, da ein Enum-Wert vom Typ VermCode (eine spezielle Variante von Long alias Int64) nicht in einen Integer (alias Int32) umgewandelt werden kann. Diese versuchte Umwandlung hast Du bei Return myEnum, weil myEnum vom Typ VermCode ist, Du aber gleichzeitig angibst, dass die Methode GetVermPktCode nur einen Integer zurückgeben soll. Du versuchst so, eine (theoretisch mögliche) riesige Zahl in eine Variable zu pressen, in der nicht genügend Platz ist. Ja, Deine Enum-Werte gehen nur bis 99. Aber dank der As Long-Deklaration sind Werte bis 2^64 - 1 möglich - zuviel für Integer (2^32 - 1)
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.