Как преобразовать эту строку кода из C # в vb.net - PullRequest
1 голос
/ 03 февраля 2012

Я конвертирую кодовый блок из C # в VB.NET, используя 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)

Ошибка в приведенной выше строке:

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

Ответы [ 2 ]

2 голосов
/ 03 февраля 2012

Это должно преобразовать Массив 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 голос
/ 03 февраля 2012

Вторым аргументом Array.ConvertAll должен быть метод, используемый для преобразования (см. здесь )

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

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