簡體   English   中英

從C#到VB.NET的新轉換-編譯錯誤

[英]Converting New With from C# to VB.NET - Compilation Error

我在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:預計語句結束。

代碼有什么問題?

我的心理調試技巧告訴我,您正在使用VB.Net 2005,它不支持匿名類型

lista.Add(New InvValorMedio With {.Data_Base = _dataBase, _
                                  .Tipo = item.IdInvTipo, _
                                  .Valor = 0})

這可能是2010年之前的VB.Net版本,在這種情況下FROM語法不可用(我之前在開發人員融合轉換了一些代碼時遇到了同樣的問題-我正從.Net 4中的C#轉到VB .Net 3.5中的.Net)

以下兩個階段的過程應該做到這一點-尚未找到使它成為一行的方法:

Dim arr() = { _
    New With {.Value = 1, .Display = "ap"}, _
    New With {.Value = 2, .Display = "up"} _
}
return = New ArrayList(arr)

VB2005特定的答案涉及創建一個類來保存值,然后用該類的實例填充arraylist。

班級:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM