Mình có đoạn code này:
unsafe public Task<object> uncompress16(dynamic input)
{
var inputHexAddress = Convert.ToUInt64((string)input.inputHexAddress, 16);
if (inputHexAddress == 0) throw new ArgumentException("Hex address is in invalid form!");
var outputGetter = (Func<object, Task<object>>)input.outputGetter;
var inputArr = (byte*)(new UIntPtr(inputHexAddress).ToPointer());
var inputLen = (int)input.inputLen;
var compressedData = new UnsafeArray(inputArr, inputLen);
int size = (int)compressedData[1] + ((int)compressedData[2] << 8) + ((int)compressedData[3] << 16);
return outputGetter(size).ContinueWith<object>(uncompress16_stage2);
}
unsafe private object uncompress16_stage2(Task<object> lastTask)
{
var output = (dynamic)lastTask.Result;
var outputHexAddress = Convert.ToUInt64((string)output.outputHexAddress, 16);
if (outputHexAddress == 0) throw new ArgumentException("Hex address is in invalid form!");
var outputArr = (byte*)(new UIntPtr(outputHexAddress).ToPointer());
var outputLen = output.outputLen;
var uncompressedData = new UnsafeArray(outputArr, outputLen);
return output;
}
Kết quả là dòng này:
var uncompressedData = new UnsafeArray(outputArr, outputLen);
Báo lỗi:
Cannot use an expression of type 'byte*' as an argument to a dynamically dispatched operation.
Nhưng dòng này:
var compressedData = new UnsafeArray(inputArr, inputLen);
Lại không sao cả:
Đây là class UnsafeArray:
public class UnsafeArray
{
unsafe private byte* _array;
unsafe private int _len;
unsafe public UnsafeArray(byte* array, int len)
{
if (array == null) throw new NullReferenceException("Array is null!");
if (len < 0) throw new ArgumentOutOfRangeException("Array length cannot be negative!");
this._array = array;
this._len = len;
}
unsafe public byte this[int key]
{
get
{
if (key < 0 && key >= _len) throw new ArgumentOutOfRangeException("Index of array is out of bound.");
return _array[key];
}
set
{
if (key < 0 && key >= _len) throw new ArgumentOutOfRangeException("Index of array is out of bound.");
_array[key] = value;
}
}
}
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?