0

Visual Basic 2010にはList、オブジェクト (Appliance を String として、KwHHr を Double として)、 applianceListReturn があります。各オブジェクトには 2 つのメンバーがあります。array各オブジェクトから同じタイプの 1 つのメンバー (KwHHr) を取得し、それらの単一のメンバーを作成したいと思います。私は VB を初めて使用しますが、これは最初に登場したほど簡単ではありません。これを実現するために `for each ループを使用しようとしましたが、1 つの値しか返されません。これは私のコードです:

    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

これが理にかなっていることを願っています。ご協力ありがとうございました。

4

1 に答える 1

2

LINQ to Object を使用してそれを実現できます。

Dim results As Array(Of String) = applianceListReturn.Select(Function(a) a.KwHHr).ToArray()
于 2013-01-14T08:49:27.280 に答える