2016-08-03 86 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一個新的列表