0

I have a List of objects(Appliance as String and KwHHr as Double), applianceListReturn , in Visual Basic 2010. Each object has two members. I would like to take one member(KwHHr) of the same type from each object and make an array out of those single members. I am new to VB and this is not as easy as it first appeared. I have attempted to use a `for each loop to achieve this but it only returns one value. This is my code:

    Imports System.Collections.Generic
    Public Class Form1
    Private ApplName As String '= Nothing
    Private ApplKwCost As Double
    Dim ConvAppliance As String
    Dim ConvKwHHr As String
    Public KwhCost As Double = 0

    Dim ApplianceCost As New ArrayList()

    'create structure for object in list
    Private Structure Appliance
        'public Variables

        Public Appliance As String
        Public KwHHr As Double

        ' provide get methods to allow return of objects in a formatted way
        Public ReadOnly Property ApplianceInfo() As String
            Get
                Return Appliance & " " & KwHHr
            End Get

        End Property
        Public ReadOnly Property ApplianceInfo2() As String
            Get
                Return Appliance & " " & KwHHr
                Return KwHHr
            End Get

        End Property

        Public Overrides Function ToString() As String
            Return ApplianceInfo2
        End Function
    End Structure

    Private ApplianceObj As Appliance
    Dim arraylistReturn As New List(Of Appliance)

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        ' choose KwHr price
        KwCost.Text = KwhCost

        ' add appliance data to list
        ApplianceObj.Appliance = "Washer"
        ApplianceObj.KwHHr = 1.25

        arraylistReturn.Add(New Appliance With {.Appliance = ApplianceObj.Appliance, .KwHHr = ApplianceObj.KwHHr})

        ApplianceObj.Appliance = "Dryer"
        ApplianceObj.KwHHr = 1.3

        arraylistReturn.Add(New Appliance With {.Appliance = ApplianceObj.Appliance, .KwHHr = ApplianceObj.KwHHr})

        ApplianceObj.Appliance = "Toaster"
        ApplianceObj.KwHHr = 1.54

        arraylistReturn.Add(New Appliance With {.Appliance = ApplianceObj.Appliance, .KwHHr = ApplianceObj.KwHHr})

    End Sub

    Private Sub ApplAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ApplAdd.Click
        KwhCost = KwCost.Text

        Dim newArray() As Double = {1.25, 1.3, 1.54}

        'enter appliance data
        ApplianceObj.Appliance = TxtBxApplAd.Text
        ApplianceObj.KwHHr = TextBoxKwhUse.Text
        ApplianceCost.Add(ApplianceObj.KwHHr)

        'displays added appliances in applist listbox
        displayAppliance(ApplianceObj)

        'add applianceobj entries to arraylistreturn

        arraylistReturn.Add(New Appliance With {.Appliance = ApplianceObj.Appliance, .KwHHr = ApplianceObj.KwHHr})

        For Each App As Appliance In arraylistReturn
            ArrayDispBox.Items.Add(App.ApplianceInfo.ToString())
        Next

        ReDim Preserve newArray(arraylistReturn.Count())
        'count items in list
        'AppList.Items.Add(arraylistReturn.Count().ToString)

        newArray(arraylistReturn.Count()) = TextBoxKwhUse.Text

        Dim sum As Double = 0
        For int As Integer = 0 To newArray.GetUpperBound(0)
            sum += newArray(int)
            TextBoxTotal.Text = sum.ToString()
        Next int
    End Sub

    Private Sub displayAppliance(ByVal App As Appliance)
        AppList.Items.Add(App.ApplianceInfo2)
    End Sub

    ' get selected appliances for calculation
    Private Sub ArrayDispBox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ArrayDispBox.SelectedIndexChanged
        AppList.Items.Add(arraylistReturn.Item(ArrayDispBox.SelectedIndex))
    End Sub
End Class

I hope this makes sense. Thank you for your help.

  • You should clarify your question a bit: which list is your source and which property you'd like to extract from it? – MarcinJuraszek Jan 13 '13 at 21:29
  • I think I have added enough detail, sorry. The list is applianceListReturn and KwHHr is the property I wish to put in the array. – user1974873 Jan 13 '13 at 22:41

1 Answers1

2

You can use LINQ to Object to achieve that:

Dim results As Array(Of String) = applianceListReturn.Select(Function(a) a.KwHHr).ToArray()
MarcinJuraszek
  • 124,003
  • 15
  • 196
  • 263