2016-08-23 5 views
-2

У меня есть класс, как этосписка (MyClass) инициализатора vb.net

Class Myclass 
    itemdata as string 
    name as string 
End Class 

как я инициализируется этот класс с и массив строки для обоих свойств?

это то, что я пытаюсь, какая операционная система, очевидно, неправильно

Dim ls As New List(Of Myclass)(New Myclass() {("A1,A2,A3,A4".Split(","))}) 

мне нужно что-то вроде этого после инициализации, значение каждого элемента в списке будет походить, как если бы назначается вручную, как этот

List(0).itemdata="A1" 
List(0).name="A1" 
List(1).itemdata="A2" 
List(2).name="A2" 

и т.д.

+0

Вам действительно нужен [mcve]. Что такое 'dicOpts'? Откуда «ключ»? – Enigmativity

+0

PLS проверить изменения – Smith

+0

Как вы ожидаете, что четыре значения будут вставлены в класс с двумя полями? Вы ожидаете создания двух классов или четырех классов? – Enigmativity

ответ

1

Для начала Myclass является зарезервированным именем, поэтому я использовал Myclass2.

Это ближайший к вам код, который я могу сделать это:

Dim dicOpts = New Dictionary(Of String, String) From {{"foo", "bar,woo"}} 
Dim key = "foo" 
Dim ls As New List(Of Myclass2) From { New Myclass2() With { .itemdata = dicOpts(key).Split(","c)(0), .name = dicOpts(key).Split(","c)(1) } } 

Это дает:

result


Основываясь на ваших правок я думаю, что это ближе к тому, что вы хотите:

Dim text = "A1,A2,A3,A4" 
Dim ls = _ 
    text _ 
     .Split(","c) _ 
     .Select(Function (x) New Myclass2() With { .itemdata = x, .name = x }) _ 
     .ToList() 

теперь я получаю это:

result2

+0

Кажется, что выражение linq неверно, оно подчеркивало 'From' до конца, говоря, что ожидаемый конец оператора – Smith

+0

@Smith. Здесь вообще нет кода LINQ. Я тестировал код перед публикацией. Это действительный код VB.NET. – Enigmativity

+0

Я использую vs2008, так что, возможно, может быть разница в компиляторе? – Smith

-1

я уже переименовал свой класс (ы) .... надеюсь у понять, что и означает с ним:

Создать свой класс:

Class xxx '(this was your 'myclass') 
    Private _p1 As String 
    Private _p2 As String 
    Private _p3 as String 

    Sub New(p1 As String, p2 As String) 
     ' TODO: Complete member initialization 
     _p1 = p1 
     _p2 = p2 
    End Sub 
    Sub New(p1 As String, p2 As String, p3 as String) 
     ' TODO: Complete member initialization 
     _p1 = p1 
     _p2 = p2 
     _p3 = p3 
    End Sub 
End Class 

я бы изменил SubNew-метод с 2-мя перегрузками ... теперь и нужно вызвать экземпляр класса с параметрами (или без него):

Class yyy 
    Private lf As New List(Of xxx) 
    Sub CallOrWhatEver() 
     lf.Add(New xxx("itemdata", "name")) 
     lf.Add(New xxx("p1value","p2value","p3value")) 
    End Sub 
End Class 
Смежные вопросы