2012-02-03 62 views
1

我使用的,除了一条线,我想不出如何转换http://www.developerfusion.com/tools/convert/csharp-to-vb/如何这行代码转换,从C#到vb.net

一切进展顺利转换代码块从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(值作为System.Drawing.PointF)作为 System.Drawing.Point“值”

如果没有指定”。

+0

也许VB.Net认为Point.Round是一个函数,而不是一个枚举的值,从而询问你一个参数。 当你在'(pts,'?)后面输入'Point.'时,在你的智能感知(或相同)中会发生什么? – Eregrith 2012-02-03 09:43:04

回答

2

这应该转换的PointF数组到一点:

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

您需要通过PointFPoint.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

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

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

它可能是该行缺少AddressOfPoint.Round调用之前,因此该方法被作为委托,而不是被执行过,具体如下:

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