0

私はC#で次のコードを持っています:

public static ArrayList GetGenders()
{
    return new ArrayList()
    {
        new { Value = 1, Display = "ap" },
        new { Value = 2, Display = "up" }
    };
}

それはうまくいっています。ただし、VB.NET に変換すると、次のようになります。

Public Shared Function GetGenders() As ArrayList
    Return New ArrayList() From { _
        New With { _
            .Value = 1, _
            .Display = "ap" _
        }, _
        New With { _
            .Value = 2, _
            .Display = "up" _
        } _
    }
End Function

次のコンパイル時エラーが発生します。

BC30205: ステートメントの終わりが予想されます。

コードの問題は何ですか?

4

4 に答える 4

3

私の精神的なデバッグ スキルによると、匿名型をサポートしていないVB.Net 2005 を使用しているようです。

于 2011-12-19T18:43:52.693 に答える
0

これは2010年より前のバージョンのVB.Netである可能性があります。その場合、FROM構文は使用できません(以前、developerfusionによって変換されたコードで同じ問題が発生しました。.Net4のC#からVBに移行していました。 .Net 3.5のネット)

次の2段階のプロセスでそれを実行する必要があります-まだ1行にする方法が見つかりません:

Dim arr() = { _
    New With {.Value = 1, .Display = "ap"}, _
    New With {.Value = 2, .Display = "up"} _
}
return = New ArrayList(arr)
于 2011-12-19T18:55:32.883 に答える
0

VB2005 固有の回答には、値を保持するクラスを作成してから、配列リストにクラスのインスタンスを設定することが含まれます。

クラス:

Public Class LookupList
    Private m_Value As Integer
    Private m_sDisplay As String

    Public Sub New()
        MyBase.New()
    End Sub
    Public Sub New(ByVal wValue As Integer, ByVal sDisplay As String)
        Me.New()
        Me.Value = wValue
        Me.Display = sDisplay
    End Sub

    Public Property Value() As Integer
        Get
            Return m_Value
        End Get
        Set(ByVal value As Integer)
            m_Value = value
        End Set
    End Property
    Public Property Display() As String
        Get
            Return m_sDisplay
        End Get
        Set(ByVal value As String)
            m_sDisplay = value
        End Set
    End Property
End Class

そして方法:

Public Shared Function GetGenders() As ArrayList
    Dim oList As New ArrayList
    oList.AddRange(New LookupList() {New LookupList(1, "ap"), New LookupList(2, "up")})
    Return oList
End Function

元の C# コードに少し近い解決策は、クラスのコレクション クラスを作成することです。

Public Class LookupListCollection
    Inherits System.Collections.Generic.List(Of LookupList)

    Public Sub New()
        MyBase.New()
    End Sub
    Public Sub New(ByVal ParamArray aItems As LookupList())
        Me.New()
        If aItems IsNot Nothing Then
            Me.AddRange(aItems)
        End If
    End Sub

End Class

これは次のように呼び出すことができます。

Public Shared Function GetGenders() As LookupListCollection
    Return New LookupListCollection(New LookupList(1, "ap"), New LookupList(2, "up"))
End Function
于 2011-12-19T19:47:39.867 に答える