2012-02-03 2 views
1

Я преобразования кодоблок из C# в 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) 

Ошибка в приведенном выше линии:

Аргумент не указано для параметра 'значение' «Public Shared Функция Round (значение As System.Drawing.PointF) Как System.Drawing.Point ».

+0

Может быть, VB.Net думает Point.Round является функцией, а не значение перечисления, и таким образом задает вам параметр. Что происходит в вашей intellisense (или такой же), когда вы вводите 'Point.' после' (pts, '? – Eregrith

ответ

2

Это должно преобразовать массив PointF в точку:

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, как @ Джон отметил:

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)

Возможно, что в строке отсутствует AddressOf до Point.Round вызова, так что этот метод передается в качестве делегата, а не выполняется следующим образом:

result.DrawPolyline(Array.ConvertAll(Of PointF, Point)(pts, AddressOf Point.Round), True, New Bgr(Color.Red), 5) 
Смежные вопросы