Получить двойной [,] из ILRetArray<double>?
Как я могу получить System.Array (double[,]) из ILRetArray с 2 измерениями? Есть метод ExportValues, но результат двойной [].
1 ответ
Я нашел, как преобразовать ILArray в двойной массив [,]? С модификацией для T[,] в результате:
private T[,] ToSystemMatrix<T>(ILInArray<T> A)
{
using (ILScope.Enter(A))
{
// some error checking (to be improved...)
if (object.Equals(A, null)) throw new ArgumentException("A may not be null");
if (!A.IsMatrix) throw new ArgumentException("Matrix expected");
var dims = A.S.ToIntArray();
if (dims.Length != 2) throw new ArgumentException("Matrix with 2 Dimensions expected");
// create return array
var ret = new T[dims[0], dims[1]];
// fetch underlying system array
T[] workArr = A.GetArrayForRead();
// copy memory block
Buffer.BlockCopy(workArr, 0, ret, 0, Marshal.SizeOf(typeof(T)) * A.S.NumberOfElements);
return ret;
}
}