如何将这行代码从C#转换为vb.net

本文关键字:转换 vb net 代码 | 更新日期: 2023-09-27 18:22:15

我正在使用http://www.developerfusion.com/tools/convert/csharp-to-vb/

一切都很顺利,除了一行我不知道如何转换:

C#源

result.DrawPolyline(Array.ConvertAll<PointF, Point>(pts, Point.Round), true, new Bgr(Color.Red), 5);

使用转换器可实现此

result.DrawPolyline(Array.ConvertAll(Of PointF, Point)(pts, Point.Round), True, New Bgr(Color.Red), 5)

上一行中的错误为:

未为"Public Shared"的参数"value"指定参数函数舍入(值为System.Drawing.PointF)为System.Drawing.Point'.

如何将这行代码从C#转换为vb.net

这应该将PointF数组转换为Point:

result.DrawPolyline(Array.ConvertAll(Of PointF, Point)(pts, Function(p) Point.Round(p)), True, New Bgr(Color.Red), 5)

您需要将PointF传递给Point.Round.

测试对象:

Dim pts As PointF() = {New PointF(123.23, 12345.23)}
Dim r = Array.ConvertAll(Of PointF, Point)(
            pts,
            Function(p) Point.Round(p))

如果您像@Jon提到的那样将委托传递给Point.Round,也会起作用:

Dim pts As PointF() = {New PointF(123.23, 12345.23)}
Dim r = Array.ConvertAll(Of PointF, Point)(
            pts,
            AddressOf Point.Round)

Array.ConvertAll的第二个参数应该是用于转换的方法(请参阅此处)

该行可能在Point.Round调用之前缺少AddressOf,因此该方法作为委托传递,而不是执行,如下所示:

result.DrawPolyline(Array.ConvertAll(Of PointF, Point)(pts, AddressOf Point.Round), True, New Bgr(Color.Red), 5)