Итак, дело в том, что я получаю данные через мобильное приложение через Bluetooth в xamarin. На входе я получаю набор значений каждые 1000 миллисекунд. Например -44-12-1024, и я хочу, чтобы они отображались на моем экране вместе с обновлениями. Но я получаю сообщение об ошибке при разделении строки дохода на 3 переменные

              _myConnection.ThisSocket.InputStream.Read(read, 0, 1);
               _myConnection.ThisSocket.InputStream.Close();
                String DispString = ASCIIEncoding.Default.GetString(read);
                string newstring = DispString;    
                Device.BeginInvokeOnMainThread(() =>
                {
                    string[] CommString = newstring.Split(' ');
                    foreach (string var in CommString)
                    {
                        x = CommString[0];
                        y = CommString[1]; //exception is here (Out of range)
                        z = CommString[2];
                    }
                    int newx = (int)Convert.ToDouble(x);
                    int newy = (int)Convert.ToDouble(y);
                    int newz = (int)Convert.ToDouble(z);

                    JustLabel.Text = ("value is "+newx+" "+newy+" "+newz);

                });
-2
Nikita Lvov 3 Июн 2018 в 08:35

1 ответ

Лучший ответ

Защитное программирование 101

Никогда не доверяйте никому коду или данным и определенно не доверяйте своим собственным

Как исправить вашу проблему?

string[] CommString = newstring.Split(' ');

// Sanity Check
if(CommString.Length < 3)
{
   // oh no's!!!!

   // log
   // throw
   // writeline

   // somehow deal with it
}
else
{
   x = CommString[0];
   y = CommString[1]; 
   z = CommString[2];
}
2
TheGeneral 3 Июн 2018 в 06:01