Vb.net 使用LINQ在字符串列表中替换

Vb.net 使用LINQ在字符串列表中替换,vb.net,linq,Vb.net,Linq,我一直在将代码转换为使用LINQ查询,但遇到了一些我无法理解的问题(对于LINQ来说是非常新的) 我有一个自定义对象“maindata”,它包含一个标题字符串列表,它还包含一个文件列表(另一个自定义对象),在该对象中还有一个标题字符串列表 我基本上需要在不同的时间做两件不同的事情 1) 在maindata.file(1).headers.replace(“x”,“y”)(完全100%匹配,我知道我不能.replace,因为它是一个字符串列表) 2) 在maindata.headers.repla

我一直在将代码转换为使用LINQ查询,但遇到了一些我无法理解的问题(对于LINQ来说是非常新的)

我有一个自定义对象“maindata”,它包含一个标题字符串列表,它还包含一个文件列表(另一个自定义对象),在该对象中还有一个标题字符串列表

我基本上需要在不同的时间做两件不同的事情

1) 在maindata.file(1).headers.replace(“x”,“y”)(完全100%匹配,我知道我不能.replace,因为它是一个字符串列表)

2) 在maindata.headers.replace(“x”、“y”)以及maindata.file(all.headers.replace(“x”、“y”)中(同样完全匹配)

我已经用LINQ做了一些基本的布尔检查,但这超出了我所触及的范围,任何帮助都将不胜感激

vb.net中的编码

For I As Integer = 0 To MainData.HeaderName.Count - 1
    If MainData.HeaderName(I) = OldHeader Then
        MainData.HeaderName(I) = NewHeader
    End If
Next
For I As Integer = 0 To MainData.Files.Count - 1
    For J As Integer = 0 To MainData.Files(I).CurrentHeaders.Count - 1
        If MainData.Files(I).CurrentHeaders(J) = OldHeader Then
            MainData.Files(I).CurrentHeaders(J) = NewHeader
        End If
    Next
Next

For I As Integer = 0 To SelectedFile.CurrentHeaders.Count - 1
    If SelectedFile.CurrentHeaders(I) = OldHeader Then
        SelectedFile.CurrentHeaders(I) = NewHeader
    End If
Next

林克不会在这里帮忙的原因只有一个。您正在修改集合中的值。如果它们是要更新其属性的引用类型的集合,则可以对它们进行循环并更新属性,但由于它们是值类型的集合,因此必须使用
For
循环进行更新

我唯一能看到非常微小改进的地方是为循环制作一个
,为每个
循环制作一个

For Each file in MainData.Files
    For J As Integer = 0 To file.CurrentHeaders.Count - 1
        If file.CurrentHeaders(J) = OldHeader Then
            file.CurrentHeaders(J) = NewHeader
        End If
    Next
Next

发布您尝试过的内容,但Linq用于查询,而不是更新。无论如何,最终都会使用一个循环,因此尝试在Linq中插入可能会使事情复杂化。如果使用循环,则可能不需要转换为Linq。为了提高性能,我尝试避免使用循环。该程序最终是一个数据标准化工具,主要数据是所有输入文件的累积输出。自定义对象保存所有标题和信息,以便稍后将数据连接在一起。很多列表,根据传入的数据可能会变得相当大。Linq是循环,只是用“更干净”的语法包装。Linq的设计目的不是提高性能,而是提高编码效率。更改数据应该在一个循环中完成。嵌套循环的数量是荒谬的,因此想要清理它。不管为什么,如果可能的话,我想试着在LINQ中做这件事。所以把你目前所拥有的发布出来。使用Linq可以减少嵌套循环的数量。对于每个循环,我通常坚持使用For循环,因为我有很多链接数据,以后进行任何更改都可能需要位置值。(我可以为每个循环制作好几个单循环。)谢谢你的帮助。