c#windows应用程序数组和字符串拆分

c#windows应用程序数组和字符串拆分,c#,arrays,winforms,visual-studio-2012,visual-studio-2013,C#,Arrays,Winforms,Visual Studio 2012,Visual Studio 2013,我试图在C#中拆分字符串,我使用以下代码: string str = Encoding.ASCII.GetString(e.Data); string[] words = str.Split(' '.ToArray()); 但是我在Split(''.ToArray())上有一个错误我想分割文本并将其保存为数组,例如我有: string input = '1 2 3 4 5 6 7'; 要创建的阵列为: string[] array = input.split(' '); output: ar

我试图在C#中拆分字符串,我使用以下代码:

string str = Encoding.ASCII.GetString(e.Data);
string[] words = str.Split(' '.ToArray());
但是我在
Split(''.ToArray())上有一个错误我想分割文本并将其保存为数组,例如我有:

string input = '1 2 3 4 5 6 7';
要创建的阵列为:

string[] array = input.split(' ');
output:
array[0] = 1
array[1] = 2 ....
我试过这种方法,但不管用,我不知道为什么

来自异常的消息是:
“索引超出了数组的边界”

以下是所有代码:

void _spManager_NewSerialDataRecieved(object sender, SerialDataEventArgs e)
        {
            if (this.InvokeRequired)
            {
                // Using this.Invoke causes deadlock when closing serial port, and BeginInvoke is good practice anyway.
                this.BeginInvoke(new EventHandler<SerialDataEventArgs>(_spManager_NewSerialDataRecieved), new object[] { sender, e });
                return;
            }

            int maxTextLength = 1000; // maximum text length in text box
            if (tbData.TextLength > maxTextLength)
                tbData.Text = tbData.Text.Remove(0, tbData.TextLength - maxTextLength);

            // This application is connected to a GPS sending ASCCI characters, so data is converted to text
            string str = Encoding.ASCII.GetString(e.Data);
            //tbData.AppendText(str);
            //tbData.ScrollToCaret();

            string[] words = str.Split();

            try
            {
                tbData.Text = words[1].ToString();
            }
            catch (Exception ex)
            { 
                MessageBox.Show(ex.Message);
            }

            richD.AppendText(str);
            richD.ScrollToCaret();

        }
void\u spManager\u newserialDataReceived(对象发送方,SerialDataEventArgs e)
{
if(this.invokererequired)
{
//使用此.Invoke会在关闭串行端口时导致死锁,无论如何,BeginInvoke是一种很好的做法。
this.BeginInvoke(新事件处理程序(_spManager_newserialdatareceived),新对象[]{sender,e});
返回;
}
int maxTextLength=1000;//文本框中的最大文本长度
如果(tbData.TextLength>maxTextLength)
tbData.Text=tbData.Text.Remove(0,tbData.TextLength-maxTextLength);
//此应用程序连接到发送ASCCI字符的GPS,因此数据将转换为文本
string str=Encoding.ASCII.GetString(e.Data);
//tbData.AppendText(str);
//tbData.ScrollToCaret();
string[]words=str.Split();
尝试
{
tbData.Text=words[1].ToString();
}
捕获(例外情况除外)
{ 
MessageBox.Show(例如Message);
}
附录文本(str);
richD.ScrollToCaret();
}
希望你能帮忙。
或者,如果您有更好的主意在datagridview中插入接收到的数据,那么解决方案就在您的问题中

在给定的代码中,您试图拆分字符串而不指定参数

string[] words = str.Split();
这不会将字符串拆分为多个部分。它将在数组中只创建一个元素。当您试图从
word
数组访问索引1中的第二个元素时

tbData.Text = words[1].ToString();
这将导致一个错误,即索引1上没有元素。数组中的元素计数数只有索引0处的1

因此,您可以从索引0中获取字符串,也可以在
Split()
函数中指定参数

string[] words = str.Split(' ');

Split方法将返回字符串[]。你有什么问题。行str.Split(“”.ToArray());同样错误。您收到的异常似乎表明您的
str
没有值。您是否在调试器中验证了
str
确实有值?好的,那么编辑中的完整代码与最初请求帮助时发布的部分代码如何匹配?你的问题是“我在
Split(''.ToArray());
上有一个错误,但是你的代码有
str.Split();
。如果你不先发布错误的代码,我们就不可能准确地告诉你什么代码是错误的。”。