是否可以不加选择地访问非托管和托管数组元素?

时间:2015-02-15 09:03:42

标签: c# unsafe subscript

一个例子可以说清楚:

unsafe void ProcessUnmanagedBuffer( float * buffer, int length )
{
    int i;
    for( i = 0; i < length; i++ )
    {
        buffer[ i ] = ...;
    }
}

void ProcessManagedBuffer( float[] buffer, int length )
{
    int i;
    for( i = 0; i < length; i++ )
    {
        buffer[ i ] = ...;
    }
}

// common interface to avoid duplicate code?
void ProcessBuffer( IndexableThing buffer, int length )

当然,由于float *不是类,所以不能有通用的接口。

显而易见的解决方案是包装和覆盖索引器,但对于性能关键代码,这远非理想。

不太明显的是将float []固定并获得指向它的指针。更好,但固定也会产生一些开销。

我怀疑没有好的解决方案 - 任何想法?

0 个答案:

没有答案