【问题标题】:Using zip in vb.net to send items in pairs from two lists to a console.writeline在 vb.net 中使用 zip 将两个列表中的项目成对发送到 console.writeline
【发布时间】:2017-10-09 22:31:48
【问题描述】:

我已经设法将两个双精度列表中的项目组合成一个字符串列表以打印到 Console.Writeline:

Dim list3 = list1.Zip(Of Double, String)(list2, Function(x, y) x.ToString + vbTab + y.ToString)
For Each n In list3
    Console.WriteLine(n)
Next

前面几行工作正常。但是,我想知道是否可以将这些合并到一个操作中。我试过下面的代码,编译失败:

list1.Zip(Of Double, Object)(list2, Sub(x, y) Console.WriteLine(x.ToString + vbTab + y.ToString))

我收到警告说嵌套子没有与委托“Func(Of Double, Double, Object)”兼容的签名。如果我将第一个签名从 (of Double, Object) 更改为 (of Double, Double, Object),则可以修复嵌套子的错误,但随后会为 list1.Zip 生成一个新错误。我可能遗漏了一些明显的东西,但如果有人能指导我找到解决方案,我将不胜感激。

注意。我正在使用“选项推断”

【问题讨论】:

    标签: vb.net list foreach


    【解决方案1】:

    至少有一个而且几乎可以肯定更多的第三方库提供了ForEach 扩展方法,您可以直接在可枚举列表上调用该方法。在没有其中之一的情况下,您可以使用Array.ForEach

    Array.ForEach(list1.Zip(list2,
                            Function(x, y) x & vbTab & y).
                        ToArray(),
                  Sub(s) Console.WriteLine(s))
    

    请注意,我还简化了您的原始代码:

    list1.Zip(Of Double, String)(list2, Function(x, y) x.ToString + vbTab + y.ToString)
    

    到:

    list1.Zip(list2, Function(x, y) x & vbTab & y)
    

    不需要指定Zip 方法的泛型类型,因为它可以被推断出来。此外,您应该始终使用连接运算符& 来连接而不是加法运算符+。这样做意味着不需要在数字上调用ToString,因为连接仅在Strings 上执行,因此转换内置于运算符中。更准确地说,运算符是为String 类型和数字类型定义的。

    【讨论】:

    • 谢谢!抱歉,我花了这么长时间才将您的回复标记为答案。
    猜你喜欢
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    • 2022-12-17
    • 1970-01-01
    • 2017-09-28
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多