Как "работать" с безразмерным массивом в структуре?

вот у меня пример и я совершенно не могу принципов работы с безразмерными массивами. Как в структуре "работать" с массивом в СИ-шарп ??

Вот пример :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

// структура
    struct Message
    {

        byte[] setMessage = new byte[]; // вот тут ошибка !!!!

        public string name_can; // первый либо второй кан
        public int speed_can; //скорость кан соединения
        public System.UInt32 id; /* идентификатор кадра */
        public System.Byte data[8]; /* данные */
        public System.Byte len; /* фактическая длина поля данных, от 0 до 8 байт */
        public System.UInt16 flags; /* bit 0 - RTR, bit 2 – EFF */
        public System.UInt32 ts; /* отметка времени получения (timestamp) в микросекундах */

        //public int size_can_mes; // размер принятого сообщения от 0 до 8
       // public char mes_can[8];  // кан сообщение

        public void InitializationInfo()
        {
            Console.WriteLine($"name_can: {name_can}  speed_can: {speed_can}");
        }
    }
class TrimTram1
{
    static bool Issued_mess(byte[] IssuedMess)
    {
        Message message = new Message();
        int size_mess  = message.setMessage.Lean;
        byte Nastr = 0xA1; // Маркер о настройке устройства


        string can_t = null;
        int speed_t = null;


        if (message.setMessage[0] == 0xA1)
        {
            Console.WriteLine("Инициализация прошла успешно, ");

            if(message.setMessage[1] == 0x00)
                can_t = "can0";
            if (message.setMessage[1] == 0x01)
                can_t = "can1";
            Console.WriteLine("Имя машины : {0}", can_t);
            // тут превращаем байт в в число десятиричное 
            byte tex_t = message.setMessage[2];
            int speed_t = Convert.ToInt32(tex_t);
            Console.WriteLine("Скорость машины: {0}", speed_t);

        }

        return true;     
    }

    static void Main(byte[] args) 
    {
        Console.WriteLine("Тестовая прога.");
        // передача данных в структуру
        Message message = new Message();
        message.setMessage = args;
        // вызов функции запуска
        bool a = Issued_mess(args);

        if (a)
            Console.WriteLine("Инициализация прошла успешно");
        else
            Console.WriteLine("Инициализация прошла отрицательно");
    }

} 

авто какие он мне ошибки выдаёт :

comp@comp0:~/Qt_project/TCP_IP$ mcs tehn.cs
tehn.cs(11,29): error CS1586: Array creation must have array size or array initializer
tehn.cs(16,32): error CS1519: Unexpected symbol `[' in class, struct, or interface member declaration
tehn.cs(16,33): warning CS0658: `value' is invalid attribute target. All attributes in this attribute section will be ignored
tehn.cs(94,17): error CS0136: A local variable named `speed_t' cannot be declared in this scope because it would give a different meaning to `speed_t', which is already used in a `parent or current' scope to denote something else
Compilation failed: 3 error(s), 1 warnings

с ошибкой error CS1586 вообще не знаю как справиться :-(


Ответы (2 шт):

Автор решения: OXYGEN

вот Решение

Структура

  1. data[8] = data

  2. byte[] setMessage = new byte[] setMessage[] = public byte[] setMessage;

    struct Message
    {
    
        public byte[] setMessage; // вот тут ошибка !!!!
    
        public string name_can; // первый либо второй кан
        public int speed_can; //скорость кан соединения
        public System.UInt32 id; /* идентификатор кадра */
        public System.Byte data; /* данные */
        public System.Byte len; /* фактическая длина поля данных, от 0 до 8 байт */
        public System.UInt16 flags; /* bit 0 - RTR, bit 2 – EFF */
        public System.UInt32 ts; /* отметка времени получения (timestamp) в микросекундах */
    
        //public int size_can_mes; // размер принятого сообщения от 0 до 8
        // public char mes_can[8];  // кан сообщение
    
        public void InitializationInfo()
        {
            Console.WriteLine($"name_can: {name_can}  speed_can: {speed_can}");
        }
    }
    

    Класс

  3. message.setMessage.Lean = message.setMessage.Length;

  4. int speed_t = null; = int speed_t = 0;


 class TrimTram1
        {
            static bool Issued_mess(byte[] IssuedMess)
            {
                Message message = new Message();
                int size_mess  = message.setMessage.Length;
                byte Nastr = 0xA1; // Маркер о настройке устройства


                string can_t = null;
                int speed_t = 0;


                if (message.setMessage[0] == 0xA1)
                {
                    Console.WriteLine("Инициализация прошла успешно, ");

                    if(message.setMessage[1] == 0x00)
                        can_t = "can0";
                    if (message.setMessage[1] == 0x01)
                        can_t = "can1";
                    Console.WriteLine("Имя машины : {0}", can_t);
                    // тут превращаем байт в в число десятиричное 
                    byte tex_t = message.setMessage[2];
                    speed_t = Convert.ToInt32(tex_t);
                    Console.WriteLine("Скорость машины: {0}", speed_t);

                }

                return true;     
            }

Маин

static void Main(byte[] args) 
        {
            Console.WriteLine("Тестовая прога.");
            // передача данных в структуру
            Message message = new Message();
            message.setMessage = args;
            // вызов функции запуска
            bool a = Issued_mess(args);

            if (a)
                Console.WriteLine("Инициализация прошла успешно");
            else
                Console.WriteLine("Инициализация прошла отрицательно");
        }
→ Ссылка
Автор решения: timob256

Правда тут ошибка почему то в функцию Issued_mess не заходит

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; 

struct Message
{

    public byte[] setMessage; // вот тут ошибка !!!!
    //public byte[] setMessage = new byte[256];


    public string name_can; // первый либо второй кан
    public int speed_can; //скорость кан соединения
    public System.UInt32 id; /* идентификатор кадра */
    public System.Byte data; /* данные */
    public System.Byte len; /* фактическая длина поля данных, от 0 до 8 байт */
    public System.UInt16 flags; /* bit 0 - RTR, bit 2 – EFF */
    public System.UInt32 ts; /* отметка времени получения (timestamp) в микросекундах */

    //public int size_can_mes; // размер принятого сообщения от 0 до 8
    // public char mes_can[8];  // кан сообщение

    public void InitializationInfo()
    {
        Console.WriteLine($"name_can: {name_can}  speed_can: {speed_can}");
    }
}


class TrimTram1
        {
            static bool Issued_mess(byte[] IssuedMess)
            {
                Message message = new Message();
                message.setMessage = new byte[256];

    //          public byte[] setMessage = new byte[256];

                int size_mess  = message.setMessage.Length;
                byte Nastr = 0xA1; // Маркер о настройке устройства


                string can_t = null;
                int speed_t = 0;


                if (message.setMessage[0] == 0xA1)
                {
                    Console.WriteLine("Инициализация прошла успешно, ");

                    if(message.setMessage[1] == 0x00)
                        can_t = "can0";
                    if (message.setMessage[1] == 0x01)
                        can_t = "can1";
                    Console.WriteLine("Имя машины : {0}", can_t);
                    // тут превращаем байт в в число десятиричное 
                    byte tex_t = message.setMessage[2];
                    speed_t = Convert.ToInt32(tex_t);
                    Console.WriteLine("Скорость машины: {0}", speed_t);

                }

                return true;     
            }

    public static void Main() 
        {
            Console.WriteLine("Тестовая прога.");
            // передача данных в структуру
            Message message = new Message();
            message.setMessage = System.Text.Encoding.UTF8.GetBytes(Console.ReadLine());
            // вызов функции запуска
            bool a = Issued_mess(message.setMessage); // Тут ошибка , почему то в Issued_mess он не заходит

            if (a == true)
                Console.WriteLine("Инициализация прошла успешно");
            else
                Console.WriteLine("Инициализация прошла отрицательно");
        }
}

Вот вывод:

comp@comp0:~/Qt_project/TCP_IP$ mono tehn1_old.exe 
Тестовая прога.
0xA10x000xff
Инициализация прошла успешно
→ Ссылка