Преобразование нового с из C # в VB.NET - ошибка компиляции - PullRequest
0 голосов
/ 19 декабря 2011

У меня есть следующий код в 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 ]

3 голосов
/ 19 декабря 2011

Мои навыки психической отладки говорят мне, что вы используете VB.Net 2005, который не поддерживает анонимные типы .

0 голосов
/ 29 января 2014
lista.Add(New InvValorMedio With {.Data_Base = _dataBase, _
                                  .Tipo = item.IdInvTipo, _
                                  .Valor = 0})
0 голосов
/ 19 декабря 2011

Ответ, специфичный для 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
0 голосов
/ 19 декабря 2011

Вполне возможно, что это версия VB.Net до 2010 года, и в этом случае синтаксис FROM недоступен (у меня была такая же проблема ранее с некоторым кодом, преобразованным developerfusion - я собирался из C # в .Net 4 для VB.Net в .Net 3.5)

Следующий двухэтапный процесс должен это сделать - пока не найдено способа сделать его одной строкой:

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