2016-03-10 3 views
0

Я читаю значения из PLC теговC# не удалось привести объект типа 'System.Int16 [*], чтобы ввести' System.Int16 []

public void synch_read() //reads device 
{ 
    Array values; 
    Array errors; 
    object qualities = new object(); //opc server will store the quality of the item 
    object timestamps = new object(); //store the timestamp of the read 

    //read directly from device 
    oGroup.SyncRead((short)OPCAutomation.OPCDataSource.OPCDevice, 2, ref handles, out values, out errors, out qualities, out timestamps); 

    String abcd = (Int16[])qualities.ToString(); 
} 

В этой строке

String abcd = ((Int16[])qualities).ToString(); 

Я получаю ошибку

unable to cast object of type 'system.int16[*]' to type 'system.Int16[]' 

Как я могу решить эту ошибку?

EDIT

Я попытался

Int16[] abcd = (Int16[2])qualities; 

ошибки ; expected

+0

Вы кастинг в строку, затем 'Int16 []', то назначение этого значения в строку ?? – Steve

+0

'((Int16 []) качества) .ToString()' тоже дает ту же ошибку! –

+0

@CarbineCoder, 'dynamic' библиотека нет –

ответ

2

system.int16[*] представляет собой многомерный массив, а не один одномерный массив.

Array array = (Array)qualities; 
int dimensions = array.Rank; 

Если dimensions является 2, то это int[,]. Если это 3, то это int[,,] и так далее.

Для перебора массива с foreach смотри, например https://stackoverflow.com/a/2893367/613130

Смежные вопросы