Проблема с преобразованием линейной рекурсивной функции из C# в VB .NET
У меня есть функция в C#, которую я хочу преобразовать в vb. Мне никогда не везло со встроенными функциями в vb. Код C# является:
public Double CalculateMeanError(ImageBuffer target, Int32 parallelTaskCount = 4) { // checks parameters Guard.CheckNull(target, "target"); // initializes the error Int64 totalError = 0; // prepares the function bool calculateMeanError(Pixel sourcePixel, Pixel targetPixel) { Color sourceColor = GetColorFromPixel(sourcePixel); Color targetColor = GetColorFromPixel(targetPixel); totalError += ColorModelHelper.GetColorEuclideanDistance(ColorModel.RedGreenBlue, sourceColor, targetColor); return false; } // performs the image scan, using a chosen method IList<Point> standardPath = new StandardPathProvider().GetPointPath(Width, Height); TransformPerPixel(target, standardPath, calculateMeanError, parallelTaskCount); // returns the calculates RMSD return Math.Sqrt(totalError/(3.0*Width*Height)); }
Что я уже пробовал:
Я попробовал несколько различных преобразователей кода, но он зависает на встроенной рекурсивной функции calculateMeanError. Я ценю помощь в наследовании против реализации. Вот лучший vb-код на данный момент.
Public Function CalculateMeanError(ByVal target As ImageBuffer, Optional ByVal parallelTaskCount As Int32 = 4) As Double ' checks parameters Guard.CheckNull(target, "target") ' initializes the error Dim totalError As Int64 = 0 ' prepares the function Dim calculateMeanError As Boolean Pixel sourcePixel Dim targetPixel As Pixel Dim sourceColor As Color = GetColorFromPixel(sourcePixel) Dim targetColor As Color = GetColorFromPixel(targetPixel) totalError = (totalError + ColorModelHelper.GetColorEuclideanDistance(ColorModel.RedGreenBlue, sourceColor, targetColor)) Return false ' performs the image scan, using a chosen method Dim standardPath As IList(Of Point) = (New StandardPathProvider + GetPointPath(Width, Height)) TransformPerPixel(target, standardPath, calculateMeanError, parallelTaskCount) ' returns the calculates RMSD Return Math.Sqrt((totalError / (3 _ * (Width * Height)))) End Function