Deklaration bzw. Wertzuweisung an ein Array Objekt?

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von w.stoellinger.

    Deklaration bzw. Wertzuweisung an ein Array Objekt?

    Hallo,

    ich habe ein Problem bei der Deklaration bzw. Wertzuweisung an ein Array Objekt.

    Code Version 1

    VB.NET-Quellcode

    1. Dim CreateItemRequest_Attributes(1) As CoCreate.Attribute
    2. CreateItemRequest_Attributes(0).name = "TEILENUMMER"
    3. CreateItemRequest_Attributes(0).value = "123"
    4. CreateItemRequest_Attributes(1).name = "BENENNUNG"
    5. CreateItemRequest_Attributes(1).value = "abc"
    6. CreateItemRequest_Item.attributes = CreateItemRequest_Attributes

    Fehler: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt, ... Schlüsselwort "new". Aber das darf ich bei einem Array nicht.

    Code Version 2

    VB.NET-Quellcode

    1. Dim CreateItemRequest_Attributes() As CoCreate.Attribute
    2. CreateItemRequest_Attributes.name = {"TEILENUMMER", "BENENNUNG"}
    3. CreateItemRequest_Attributes.value = {"123", "abc"}
    4. CreateItemRequest_Item.attributes = CreateItemRequest_Attributes

    Fehler: "name" ist kein Member von "System.Array".

    Code Version 3

    VB.NET-Quellcode

    1. Dim CreateItemRequest_Attributes As CoCreate.Attribute
    2. CreateItemRequest_Attributes.name = "TEILENUMMER"
    3. CreateItemRequest_Attributes.value = "123"
    4. CreateItemRequest_Item.attributes = CreateItemRequest_Attributes

    Fehler: Der Wert ... kann nicht in 1-dimesionales Array konvertriert werden.

    Bitte um Eure Unterstützung. Ich blicke da nicht mehr durch.

    Danke,

    Wolfgang


    Hier der Aufruf der Funktion die ich benötige und Auszüge aus den Klassen.

    VB.NET-Quellcode

    1. CreateItemResponse createItem(CreateItemRequest createItemRequest)


    VB.NET-Quellcode

    1. Partial Public Class CreateItemRequest
    2. Inherits ServiceRequest
    3. Private itemsField() As Item
    4. Partial Public Class Item
    5. Inherits Object
    6. Implements System.ComponentModel.INotifyPropertyChanged
    7. Private attributesField() As Attribute
    8. Private classNameField As String
    9. '''<remarks/>
    10. <System.Xml.Serialization.XmlArrayAttribute(IsNullable:=true, Order:=0)> _
    11. Public Property attributes() As Attribute()
    12. Get
    13. Return Me.attributesField
    14. End Get
    15. Set
    16. Me.attributesField = value
    17. Me.RaisePropertyChanged("attributes")
    18. End Set
    19. End Property
    20. Partial Public Class Attribute
    21. Inherits Object
    22. Implements System.ComponentModel.INotifyPropertyChanged
    23. Private nameField As String
    24. Private valueField As String
    25. '''<remarks/>
    26. <System.Xml.Serialization.XmlElementAttribute(IsNullable:=true, Order:=4)> _
    27. Public Property name() As String
    28. Get
    29. Return Me.nameField
    30. End Get
    31. Set
    32. Me.nameField = value
    33. Me.RaisePropertyChanged("name")
    34. End Set
    35. End Property
    36. '''<remarks/>
    37. <System.Xml.Serialization.XmlElementAttribute(IsNullable:=true, Order:=7)> _
    38. Public Property value() As String
    39. Get
    40. Return Me.valueField
    41. End Get
    42. Set
    43. Me.valueField = value
    44. Me.RaisePropertyChanged("value")
    45. End Set
    46. End Property

    Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von „w.stoellinger“ ()

    Dim CreateItemRequest_Attributes(1) As CoCreate.Attribute

    -->
    Dim CreateItemRequest_Attributes(1) As new CoCreate.Attribute
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Noch mal ich.
    Ich glaube, dass die Exception bei

    CreateItemRequest_Item.attributes = CreateItemRequest_Attributes

    passiert, die Feldzuweisung funktioniert.
    Sieh bitte mal nach, ob CreateItemRequest_Item Nothing ist, dann wäre CreateItemRequest_Item.attributes natürlich nicht definiert.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Sobald ich in die Zeile Dim CreateItemRequest_Attributes(1) As CoCreate.Attribute das New Einfüge kann ich den Code nicht mehr ausführen. Auch nicht wenn ich die Zeile CreateItemRequest_Item.attributes = CreateItemRequest_Attributes auskommentiere.

    CreateItemRequest_Item.className ist nicht "Nothing", denn CreateItemRequest_Item.className kann ich einen Wert zuweisen.
    Wo ist denn das CoCreate bzw. CoCreate.Attribute deklariert?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    CoCreate habe ich als Name für eine "Service Reference" vergeben die ich über Projekt => Dienstverweis hinzufügen erstellt habe. Die Definition der Klassen CreateItemRequest, Item und Attribute stehen auszugsweise in meiner Frage.

    Hier noch der aktuelle Code der Funktion die mich zur Verzweiflung treibt.

    VB.NET-Quellcode

    1. PublicFunction createItem() AsString
    2. Dim ExceptionMessage AsString
    3. Dim OSMServiceClient AsNew CoCreate.OSMServiceClient()
    4. OSMServiceClient.ClientCredentials.UserName.UserName = Benutzername
    5. OSMServiceClient.ClientCredentials.UserName.Password = Passwort
    6. Dim CreateItemRequest_Item AsNew CoCreate.Item
    7. CreateItemRequest_Item.className = "TEILE"
    8. 'Code Version 1
    9. Dim CreateItemRequest_Attributes(1) As CoCreate.Attribute
    10. CreateItemRequest_Attributes(0).name = "TEILENUMMER"
    11. CreateItemRequest_Attributes(0).value = "123"
    12. CreateItemRequest_Attributes(1).name = "BENENNUNG"
    13. CreateItemRequest_Attributes(1).value = "abc"
    14. CreateItemRequest_Item.attributes = CreateItemRequest_Attributes
    15. 'Code Version 2
    16. 'Dim CreateItemRequest_Attributes As CoCreate.Attribute
    17. 'CreateItemRequest_Attributes.name = {"TEILENUMMER", "BENENNUNG"}
    18. 'CreateItemRequest_Attributes.value = {"123", "abc"}
    19. 'Code Version 3
    20. 'Dim CreateItemRequest_Attributes As New CoCreate.Attribute
    21. 'CreateItemRequest_Attributes.name = "TEILENUMMER"
    22. 'CreateItemRequest_Attributes.value = "123"
    23. Dim CreateItemRequest AsNew CoCreate.CreateItemRequest
    24. CreateItemRequest.items = {CreateItemRequest_Item}
    25. Dim CreateItemResponse As CoCreate.CreateItemResponse
    26. Try
    27. CreateItemResponse = OSMServiceClient.createItem(CreateItemRequest)
    28. Return"createItem"
    29. Catch ex AsException
    30. ExceptionMessage = (ex.Message)
    31. Return ExceptionMessage
    32. EndTry
    33. EndFunction
    Kann es sein, dass "CreateItemRequest_Item.attributes" kein Feld haben will, sondern eine Einzelstruktur?
    Ansonsten sehe ich auch keinen Streifen am Horizont.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!