有没有办法使用linq使用列表(字符串)更新列表(某些类)的值?例如,我得到了
Public class A
Public Property value As String
End Class
Public class B
Public Property AList As List(of A)
End Class
所以我得到了一个
Dim valueList As List(Of String)
我希望将AList的所有值设置为valueList的值。例如给出
valueList = {"A", "B", "C"}
我想要
AList = { AClass1, AClass2, AClass3 }
,其中
AClass1.value = "A"
AClass2.value = "B"
AClass3.value = "C"
答案 0 :(得分:1)
不,因为LINQ不是为了产生副作用
但你可以用一个简单的for循环
来做到这一点Public Class A
Public Property Value As String
End Class
Public Class B
Public Sub Foo()
Dim AList As New List(Of A)
AList.Add(New A)
AList.Add(New A)
AList.Add(New A)
Dim valueList As New List(Of String)
valueList.Add("A")
valueList.Add("B")
valueList.Add("C")
For i As Integer = 0 To AList.Count - 1
AList(i).Value = valueList(i)
Next
AList.ForEach(Sub(a) Console.WriteLine(a.Value))
End Sub
End Class
输出
一个
乙
Ç
注意:
.ForEach
扩展名是List<T>
的成员,而不是IEnumerable<T>
的成员,这是LINQ中提供的内容。有关使用LINQ可以执行的操作的完整列表,请参阅https://msdn.microsoft.com/en-us/library/system.linq.enumerable(v=vs.110).aspx
从技术上讲,您可以使用LINQ表达式来完成类似的事情。但这只是一种解决LINQ不应产生副作用的指导方法
Dim AList As New List(Of A)
AList.Add(New A)
AList.Add(New A)
AList.Add(New A)
Dim valueList As New List(Of String)
valueList.Add("A")
valueList.Add("B")
valueList.Add("C")
Alist = AList.Select(
Function(a, i)
' the assignment is now inside the selector, which is not what
' the selector is meant to do which is transform the elements
a.Value = valueList(i)
Return i
End Function).ToList()
AList.ForEach(Sub(a) Console.WriteLine(a.Value))
这对大多数开发者来说可能不太合适