一个例子可以说清楚:
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 []固定并获得指向它的指针。更好,但固定也会产生一些开销。
我怀疑没有好的解决方案 - 任何想法?