Как поместить мои входящие данные в отсортированный список?

Я написал код C#, который будет отправлять функции (1-9) на микроконтроллер, а контроллер будет отправлять данные обратно на мой компьютер через RS232 (ПОСЛЕДОВАТЕЛЬНЫЙ ПОРТ). Проблема, с которой я сталкиваюсь, заключается в том, что я пытаюсь получить входящие данные и поместить их в отсортированный список. Ключом отсортированного списка будет дата/время, а значениями будут входящие данные. Я попытался добавить часть отсортированного списка в свой код, но безуспешно. Ошибки, которые я получаю:

Ошибка CS1503. Аргумент 2: невозможно преобразовать из «int» в «serialreadwrite.SMCValues».

CS0162 Обнаружен недостижимый код SMCData-

Мой код:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO.Ports;
using System.Timers;
using System.IO;
using System.Net;
using System.Threading;

namespace serialreadwrite
{

public class SMCValues
{
    public string ArrayVoltage;
    public string ArrayCurrent;
    public string AutoMPPT;
    public string MotorVoltage;
    public string ArrayAmps;
    public string MaxMotorVoltage;
    public string MotorRPM;
    public string SerialNumber;
    public string SMCType;






    class Program

    {
        static void Main(string[] args)
        {
            SerialPort _serialPort = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
            _serialPort.Handshake = Handshake.None;
            _serialPort.ReadTimeout = 1000;
            _serialPort.WriteTimeout = 1000;
            _serialPort.RtsEnable = true;
            _serialPort.DtrEnable = true;
            _serialPort.Open();

            for (int i = 0; i < 10; i++)
            {
                string c = Convert.ToString(i);
                byte[] array_out = Encoding.ASCII.GetBytes(c); //convert i to the right variable type;
                _serialPort.Write(array_out, 0, array_out.Length);
                byte[] array_out2 = new byte[1];
                array_out2[0] = 0xD;
                _serialPort.Write(array_out2, 0, array_out2.Length);

                //print what you receive 
                int k = 0;
                int reader = 0;
                string fullstring = "";
                while (k < 23)
                {
                    reader = _serialPort.ReadByte();
                    fullstring += Convert.ToChar(reader);
                    k++;


                    DateTime cur = DateTime.Now;
                    SortedList<DateTime, SMCValues> mySL1 = new SortedList<DateTime, SMCValues>();
                    Console.WriteLine(" (mySL1):");
                    while (true)
                    {
                        for (int j = 0; j < 10; j++)
                        {
                            string p = Convert.ToString(j);
                            cur = DateTime.Now;
                            mySL1.Add(cur, j); // j is throwing the errror
                            System.Threading.Thread.Sleep(1000);

                        }
                        foreach (KeyValuePair<DateTime, SMCValues> kvp in mySL1)
                        {
                            Console.WriteLine("my first key is = {0}, and my first value is = {1}", kvp.Key, kvp.Value);
                        }
                        Thread.Sleep(5000);



                    }
                    Console.WriteLine(fullstring);
                    _serialPort.DiscardInBuffer();
                    _serialPort.DiscardOutBuffer();


                }
                Console.ReadLine();
            }
        }
    }

}

}

person ImaNoobAtProgramming32    schedule 24.02.2016    source источник
comment
не могу преобразовать из int во что?   -  person Jacobr365    schedule 24.02.2016
comment
Извините за это, to 'serialreadwrite.SMCValues' @Jacobr365   -  person ImaNoobAtProgramming32    schedule 24.02.2016
comment
Какая строка выдает ошибки? Можете ли вы отредактировать вопрос и показать трассировку стека для ошибок. включая линию, которая его бросает.   -  person Jacobr365    schedule 24.02.2016
comment
я добавил комментарий рядом со строкой, которая вызывает ошибку @Jacobr365   -  person ImaNoobAtProgramming32    schedule 24.02.2016
comment
какой элемент smcValues ​​хранит j? Похоже, вам нужен отсортированный список объектов SMCValues. это правильно?   -  person Jacobr365    schedule 24.02.2016
comment
Да, SMCVales — это объекты, которые я хотел бы объявить как получаемую информацию @Jacobr365   -  person ImaNoobAtProgramming32    schedule 24.02.2016


Ответы (1)


Вы пытаетесь присвоить целочисленное значение «j» «SMCValues», который является классом.

Судя по вашему вопросу, вы изначально пытаетесь проверить, можете ли вы получить отсортированный список дат для работы, поэтому вы можете временно внести следующее изменение:

//SortedList<DateTime, SMCValues> mySL1 = new SortedList<DateTime, SMCValues>(); SortedList<DateTime, int> mySL1 = new SortedList<DateTime, int>();

Вам также нужно будет изменить свой foreach.

Затем позже, когда вы будете готовы, вернитесь к исходному объявлению и убедитесь, что вы используете «SMCValues» в своем выражении .Add.

person Andy P    schedule 24.02.2016