Vb.net .NET:使用列表(字符串)作为新键/值集合的值的快速方法?

Vb.net .NET:使用列表(字符串)作为新键/值集合的值的快速方法?,vb.net,collections,Vb.net,Collections,我有一个列表(字符串)对象,需要根据字符串的值创建一个新集合。新集合将是一个带有两个字符串字段的自定义类-称它们为Key和Value(但它不是内置的KeyValue类,它是一个自定义类) Key的所有值都是相同的,我只想从字符串列表中获取Value。例如: Dim slValues = New List(Of String)({"Cod", "Halibut", "Herring"}) Dim myList = New List(Of myClass)( ... amazing initia

我有一个
列表(字符串)
对象,需要根据字符串的值创建一个新集合。新集合将是一个带有两个字符串字段的自定义类-称它们为
Key
Value
(但它不是内置的KeyValue类,它是一个自定义类)

Key
的所有值都是相同的,我只想从字符串列表中获取
Value
。例如:

Dim slValues = New List(Of String)({"Cod", "Halibut", "Herring"})
Dim myList   = New List(Of myClass)( ... amazing initialisation line here? )

Class myClass
  Public Key As String   ' This will always be "Fish"
  Public Value As String ' This will be the fish name.
End Class
(注意,我实际上没有访问我正在使用的类的权限,因此不能将其更改为默认的
公钥作为String=“Fish”
Key
必须在运行时设置。)

当然,我可以做一个循环,然后手动进行,但我想知道是否有一种神奇的方法可以作为初始化行的一部分来实现这一点?

这个怎么样

Dim myList = slValues.ConvertAll(Of myClass)( _
    Function(s) New YourClass With {.Key = "Fish", .Value = s})

希望有帮助。

这里有一个替代Jodrell答案的方法,使用Linq的
选择功能:

Dim myList = slValues.Select(Function(fish) New CustomClass With {.Key = "Fish", .Value=fish}).ToList()

所有的键都是一样的?谢谢,这很有效,但在转换之后只需添加
(myClass的)
。实际上,
(myClass的)
是不需要的。但属性应为Value而不是Name。应该使用不同于MyClass的类名,因为它是一个保留关键字。是的,这只是一个示例。真正的“myclass”实际上是活动监视器API中的
SubscriberCustomField
类。由于某种原因,编译器不希望在未添加
(SubscriberCustomField的)
的情况下接受ConvertAll代码。@Component\u 15939,我认为,如果键入了
myList
,则编译器可以检测到正确的选择,否则它无法在具体类实现的类型之间进行选择。
Dim myList = slValues.Select(Function(fish) New CustomClass With {.Key = "Fish", .Value=fish}).ToList()