2016-08-03 15 views
1

Gibt es eine Möglichkeit, die Werte einer Liste (einer bestimmten Klasse) mithilfe einer Liste (eines Strings) mithilfe von linq zu aktualisieren? Zum Beispiel habe ichWerte einer Liste mit Linq aktualisieren

Public class A 
Public Property value As String 
End Class 

Public class B 
Public Property AList As List(of A) 
End Class 

Also habe ich eine

Dim valueList As List(Of String) 

und ich möchte alle Werte des AList als die Werte von valuelist einzustellen. Für gegebene Beispiel

valueList = {"A", "B", "C"} 

Ich möchte

AList = { AClass1, AClass2, AClass3 } 

wo

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

Haben Sie eine neue Liste erstellt werden soll für 'AList 'oder möchten Sie bereits vorhandene Elemente in dieser Liste aktualisieren? Beachten Sie, dass Letzteres das Gegenteil von dem ist, für das LINQ gemacht wird. LINQ dient zum Abfragen von Mengen, es ist nicht für Nebenwirkungen oder das Ändern von Werten in einer Menge. –

+0

Sie haben eine Liste , so dass Sie List.ForEach verwenden können. Insbesondere die Verwendung von LINQ wird nicht empfohlen: http://StackOverflow.com/a/200614/832052 – djv

+0

danke. Ich bin immer noch neu bei Linq und nicht wirklich damit vertraut, was es kann und was nicht. –

Antwort

1

Nein, da LINQ ist keine Nebenwirkungen gemeint

zu produzieren, aber Sie tun können, dass mit einem einfachen für Schleife

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 

Ausgänge

A
B
C

Anmerkung:

Die .ForEach Verlängerung Mitglied List<T> ist, und nicht IEnumerable<T>, das, was in verfügbar ist LINQ. Eine vollständige Liste dessen, was Sie mit LINQ tun können, finden Sie unter https://msdn.microsoft.com/en-us/library/system.linq.enumerable(v=vs.110).aspx

Technisch können Sie LINQ-Ausdrücke verwenden, um eine ähnliche Sache zu erreichen. Aber es ist nur ein Weg, um die Richtlinie zu bekommen, dass LINQ keine Nebenwirkungen erzeugen sollte

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

Dies würde wahrscheinlich nicht richtig an den meisten Entwickler