使用Action <PointerClass*>作为参数

Can*_*ğlu 5 .net c# pointers unsafe

我正在创建一个实现图像处理的性能关键型应用程序.我正在使用一些像素指针使用我的结构命名Pixel来做一些处理.我有很多代码部分迭代整个位图数据,为了代码的可重用性和模块性,我正在设计一个方法,它将采取一个动作并将其应用于图像的所有像素(如地图)功能).但是,当我写Action<Pixel*>Visual Studio抱怨代码时,该类型Pixel*可能不会被用作类型参数.整个类都在unsafe上下文中,我Pixel到处都在使用指针,但我不能将像素指针用作Action的模板类.

我可以使用,Action<IntPtr>但我需要在每次迭代中将它转换为方法体内的适当指针,这将杀死"性能关键"的整个想法.

svi*_*ick 8

似乎没有什么是强迫你使用的Action<T>,所以你可以创建自己的委托类型.我没有找到以通用方式执行此操作的方法,但这有效:

unsafe delegate void PixelAction(Pixel* ptr);
Run Code Online (Sandbox Code Playgroud)

请记住,如果这对性能至关重要,则调用委托比直接调用方法要慢.也许另一种方式可能更好,例如在编译时或在运行时使用Reflection.Emit或CodeDOM复制代码(如果这样可以在您的情况下工作)或代码生成.