【问题标题】:Update values of a list using Linq使用 Linq 更新列表的值
【发布时间】:2016-08-03 15:45:46
【问题描述】:

有没有办法使用 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"

【问题讨论】:

  • 您要为AList 生成一个新列表,还是要更新该列表中已有的元素?请注意,后者与 LINQ 的用途相反。 LINQ 用于从集合中查询,而不是用于副作用或更改集合中的值。
  • 您有一个 List,因此您可以使用 List.ForEach。具体不推荐使用LINQ:stackoverflow.com/a/200614/832052
  • 谢谢。我还是 Linq 的新手,对它能做什么和不能做什么并不十分熟悉..

标签: vb.net linq list


【解决方案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

输出

一个

C

注意:

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

这对大多数开发人员来说可能感觉不对

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    • 1970-01-01
    • 2014-02-15
    • 1970-01-01
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多