当分割中的字符串时,数组索引超出C#范围

时间:2014-03-07 06:51:04

标签: c#-4.0

你好朋友这是我的代码,我使用下面的代码来分割字符串

            string s = dt.Rows[0]["tstrim"].ToString();
            for (int i = 0; i <= s.Length-1; i++)
                {
                var val = s.Split(',')[i];
                    SqlCommand cmd1 = new SqlCommand("select Value,Details from Travelling_Master where Value='" + val + "'", connLive);
                    SqlDataAdapter da1 = new SqlDataAdapter(cmd1);
                    DataTable dt1 = new DataTable();
                    da1.Fill(dt1);
                    if (dt1 != null)
                    {
                        string val1 = dt1.Rows[0]["Value"].ToString();
                        if (val1 == "$1")
                        {
                            v1 = "Check Registerd CallerId.";
                        }
                        else if (val1 == "$7")
                        {
                            v2 = "Selecting Query From Customer.";
                        }
                        else
                        {
                        }
                        label2.Text = v1 + "," + v2;
                    }
                }

此行发生在最后一个字符串吐出后出现错误

var val = s.Split(',')[i];

数组索引没有反弹 这是在我从数据库获取字符串并更新到另一个表时完成的 所以请帮忙解决这个错误

1 个答案:

答案 0 :(得分:1)

是的,目前i可以获取s长度内的所有值 - 并且您假设在拆分之后存在许多元素

你应该拆分一次,然后迭代它:

string s = dt.Rows[0]["tstrim"].ToString();
string[] bits = s.Split(',');
foreach (string val in bits)
{
    ...
}

一般情况下,当您需要集合中的索引时,您应该更喜欢foreach

此外,写作更常规:

for (int i = 0; i < s.Length; i++)

大于

for (int i = 0; i <= s.Length - 1; i++)

...排他性上限在计算机科学中非常普遍,值得习惯它们。

重要提示

您的代码还有其他问题,但与您看到的异常没有直接关系。您当前正在通过在其中间连接一个值来构建SQL字符串:

new SqlCommand("select Value,Details from Travelling_Master where Value='" + val + "'", 
               connLive);

不要那样做。真的,真的不这样做。改为使用参数化的SQL:

  • 避免SQL injection attacks
  • 避免转换问题(尤其是日期和时间)
  • 它使您的代码更清晰(SQL只是SQL,值是值)