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

时间:2012-02-03 09:29:59

标签: c# vb.net c#-to-vb.net

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

将代码块从C#转换为VB.NET

一切顺利,除了一行,我无法想出如何转换:

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)

上述行中的错误是:

  

未为“公共共享”的参数“值”指定参数   函数Round(value As System.Drawing.PointF)As   System.Drawing.Point”。

2 个答案:

答案 0 :(得分:2)

这应该将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))

如果您将代理传递给Point.Round,如@Jon所述,它也会有效:

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

答案 1 :(得分:1)

Array.ConvertAll的第二个参数应该是用于转换的方法(参见here

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

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