2016-08-03 62 views
1

是否有更新使用linq列表(字符串)的列表(某些类)的值的方法?例如,我使用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 = {"A", "B", "C"} 

我想

AList = { AClass1, AClass2, AClass3 } 

其中

AClass1.value = "A" 
AClass2.value = "B" 
AClass3.value = "C" 
+1

做'或者你想更新该列表中已有的元素吗?请注意,后者与LINQ是相反的。 LINQ用于从集合中查询,它不是用于副作用或更改集合中的值。 –

+0

你有一个列表,所以你可以使用List.ForEach。不建议使用LINQ:http://stackoverflow.com/a/200614/832052 – djv

+0

谢谢。我对Linq还是个新手,对于它能做什么和不能做什么都不是很熟悉。 –

回答

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)) 

这可能会感觉有些不对大多数开发人员要生成`ALIST一个新的列表