如何在C#中使指针具有通用性?

5

我有一个WriteableBitmap,我使用不安全的方法来绘制像素。其中关键部分如下:

private unsafe void DrawBitmap(WriteableBitmap bitmap, byte[] pixels)
{
         // Boilerplate omitted... 

        fixed (byte* pPixels = pixels)
        {
            for (int y = 0; y < height; y++)
            {
                var row = pPixels + (y * width);
                for (int x = 0; x < width; x++)
                {
                    *(row + x) = color[y + height * x];
                }
            }
        }

        bitmap.WritePixels(new Int32Rect(0, 0, width, height), pixels, width*pf.BitsPerPixel/8, 0);
}

然而,并不确定用户要绘制的是byte类型,因此将该方法泛型化(即DrawBitmap<T>)是有意义的,但如何把指针pPixels转换为T*类型呢?
是否有其他技巧可以使我的DrawBitmap变成泛型的呢?

4
“泛型”意味着相同的方法(相同的IL代码)适用于所有类型,而不仅仅是您实际用作类型参数的那些类型。不同的整数类型(byte,int等)需要不同的IL代码,因此无法将方法定义为泛型。 - dtb
1
但正如@dtb所说,您需要一个类型,简单来说是从“object”派生的,值类型不能用于通用方法。我会考虑使用不同版本的方法。 - LukeHennerley
@LukeHennerley 这是“color”。我已经纠正了。 - kasperhj
1
@LukeHennerley:这完全是无稽之谈。(1)值类型源自对象,(2)您可以在泛型类中使用它们。 - Daniel Hilgarth
1
可能是重复的问题:C#:使用泛型创建指针数组 - sloth
显示剩余2条评论
1个回答

3

考虑使用重载

public void MethodA(byte[] pPixels) {}
public void MethodA(int[] pPixels {}
//etc...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接