我有一些unsafe
C# 代码无法更改,并且公开了如下方法:
static unsafe void Foo(
byte* a, int aLength,
byte* b, int bLength,
byte* c, int cLength,
byte* d, int dLength,
byte* e, int eLength);
我这样称呼这些方法:
static void Bar(
byte[] a, int aOffset, int aLength,
byte[] b, int bOffset, int bLength,
byte[] c, int cOffset, int cLength,
byte[] d, int dOffset, int dLength,
byte[] e, int eOffset, int eLength)
{
fixed (byte* a_ = &a[aOffset])
fixed (byte* b_ = &b[bOffset])
fixed (byte* c_ = &c[cOffset])
fixed (byte* d_ = &d[dOffset])
fixed (byte* e_ = &e[eOffset])
{
Foo(a_, aLength,
b_, bLength,
c_, cLength,
d_, dLength,
e_, eLength);
}
}
(为简洁起见,省略了参数验证。)
除非其中一个字节数组的长度为零,否则这很有效。在这种情况下,我得到一个 IndexOutOfRangeException。
指数数组的边界之外。
如何防止异常,最好不要编写大量样板代码,也不要切换fixed
到其他东西?
不安全的方法不会读取或写入长度为零的参数。