none
Structure initialisieren mit der with Klausel RRS feed

  • Frage

  • Hallo liebe msdn Gemeinde,

    das Demo zeigt eine Liste von Structuren. Läuft soweit. Nur eins bekomme ich nicht hin.
    Eine Structure m1 mit Hilfe der with Klausel mit Werten füllen.
    Dim m1 as mData with {.pt = p, .timeStanp = DateTime.now}
    Geht nicht. Was mach ich falsch?

    Schöne Grüße
    Ellen




    ''' <summary>
    ''' test mit List of und structure
    ''' </summary>
    ''' <remarks></remarks>
    Public Class Form1
    
        Private Structure mData
            Dim timeStamp As DateTime
            Dim pt As Point
        End Structure
        Private mylist As New List(Of mData)
        Private p As New Point With {.X = 11, .Y = 22}
    
    
    
        Private Sub Button1_Click(ByVal sender As System.Object, _
                                  ByVal e As System.EventArgs) _
                                  Handles Button1.Click
            Dim m1 As mData
            m1.pt.X = 10
            m1.pt.Y = 20
            m1.timeStamp = DateTime.Now
    
            Dim m2 As mData = m1
            m2.pt = p
            mylist.Add(m1)
            mylist.Add(m2)
        End Sub
    End Class
    Donnerstag, 18. Februar 2010 10:15

Antworten

  • Hallo Ellen,

    soweit ich weiss geht das nur mit New.

    Versuch mal folgendes:

            Dim StructureVar As New mData With {.pt = New Point(1, 1), .timeStamp = Date.Now}




    Hannes

    If you have got questions about this, just ask.
    Mark the thread as answered if the answer helps you. This helps others who have the same problem !
    C# to VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb/
    • Als Antwort markiert Ellen Ramcke Donnerstag, 18. Februar 2010 12:55
    Donnerstag, 18. Februar 2010 10:37
  • Hallo Ellen,

    bei der ersten Anweisung ist new zwingend erforderlich, da ansonsten Visual Basic
    die Syntax nicht auseinanderhalten kann (u. a. wegen des nächsten Beispiels).

    Die ursprüngliche (bereits seit VB Classic) Variante von With geht aber auch, z. B.:
            Dim m1 As mData
            With m1
                .pt = New Point() With {.X = 10, .Y = 20}
                .timeStamp = DateTime.Now
            End With
    
    Du kannst auch etwas schreiben wie:

            mylist.Add(New mData() With _
                { _
                    .pt = New Point() With {.X = 47, .Y = 48}, _
                    .timeStamp = New DateTime(2010, 2, 28) _
                })
    
    (und ab VS 2010 darf man endlich den "_" weglassen, womit das einigermaßen schreib-/lesbar bleibt).

    Gruß Elmar

    • Als Antwort markiert Ellen Ramcke Donnerstag, 18. Februar 2010 12:55
    Donnerstag, 18. Februar 2010 11:26
    Beantworter

Alle Antworten

  • Hallo Ellen,

    soweit ich weiss geht das nur mit New.

    Versuch mal folgendes:

            Dim StructureVar As New mData With {.pt = New Point(1, 1), .timeStamp = Date.Now}




    Hannes

    If you have got questions about this, just ask.
    Mark the thread as answered if the answer helps you. This helps others who have the same problem !
    C# to VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb/
    • Als Antwort markiert Ellen Ramcke Donnerstag, 18. Februar 2010 12:55
    Donnerstag, 18. Februar 2010 10:37
  • Hallo Ellen,

    bei der ersten Anweisung ist new zwingend erforderlich, da ansonsten Visual Basic
    die Syntax nicht auseinanderhalten kann (u. a. wegen des nächsten Beispiels).

    Die ursprüngliche (bereits seit VB Classic) Variante von With geht aber auch, z. B.:
            Dim m1 As mData
            With m1
                .pt = New Point() With {.X = 10, .Y = 20}
                .timeStamp = DateTime.Now
            End With
    
    Du kannst auch etwas schreiben wie:

            mylist.Add(New mData() With _
                { _
                    .pt = New Point() With {.X = 47, .Y = 48}, _
                    .timeStamp = New DateTime(2010, 2, 28) _
                })
    
    (und ab VS 2010 darf man endlich den "_" weglassen, womit das einigermaßen schreib-/lesbar bleibt).

    Gruß Elmar

    • Als Antwort markiert Ellen Ramcke Donnerstag, 18. Februar 2010 12:55
    Donnerstag, 18. Februar 2010 11:26
    Beantworter
  • Hallo Ihr Beiden,
    alle 3 vorgeschlagenen Lösungen funktionieren.
    Dieser Syntax hat schon etwas. Gehört in ein Lehrbuch.

    schöne Grüße und vielen Dank
    Ellen

    Donnerstag, 18. Februar 2010 12:58