拆分-索引超出了数组的范围

c# split

7004 观看

7回复

177 作者的声誉

我使用以下代码拆分字符串并存储它:

string[] proxyAdrs = linesProxy[i].Split(':');
string proxyServer = proxyAdrs[0];
int proxyPort = Convert.ToInt32(proxyAdrs[1]);


if(proxyAdrs[2] != null)
{
    item.Username = proxyAdrs[2];
}

if (proxyAdrs[3] != null)
{
    item.Password = proxyAdrs[3];
}

问题是我越来越

指数数组的边界之外。

什么时候proxyAdrs[2]不在那里。

有时proxyAdrs [2]有时会不在。

我该如何解决?

作者: Elvin 的来源 发布者: 2012 年 11 月 27 日

回应 7


9

188827 作者的声誉

决定

只需检查if语句中返回的数组的长度

if( proxyAdrs.Length > 2 &&  proxyAdrs[2] != null)
    {
        item.Username = proxyAdrs[2];
    }

出现异常的原因是,拆分返回的数组大小小于您使用的索引。如果要访问数组元素,2则数组中必须有至少一个3元素,因为数组索引以0

作者: Habib 发布者: 2012 年 11 月 27 日

0

29725 作者的声誉

尝试这个:

        string[] proxyAdrs = linesProxy[i].Split(':');
        string proxyServer = proxyAdrs[0];
        int proxyPort = Convert.ToInt32(proxyAdrs[1]);


        if(proxyAdrs.Length > 2 && proxyAdrs[2] != null)
        {
            item.Username = proxyAdrs[2];
        }

        if (proxyAdrs.Length > 3 && proxyAdrs[3] != null)
        {
            item.Password = proxyAdrs[3];
        }
作者: Hamlet Hakobyan 发布者: 2012 年 11 月 27 日

0

8877 作者的声誉

proxyAdrs在尝试下标可能不存在的项目之前,请检查的长度。

if ( proxyAdrs.Length > 1 ) {
  item.Username = proxyAdrs[2];
}
作者: Paul Alan Taylor 发布者: 2012 年 11 月 27 日

2

130480 作者的声誉

您可以在通过索引访问其元素之前检查数组的长度。

更改

   if(proxyAdrs[2] != null)
   {
            item.Username = proxyAdrs[2];
   }

   if(proxyAdrs.Length > 2 )
   {
            item.Username = proxyAdrs[2];
   }
作者: Adil 发布者: 2012 年 11 月 27 日

0

12633 作者的声誉

是您的i那可能比2您尝试设置为索引的要低:)

if i >= 2 那么您可以完成以下所有操作:

if(proxyAdrs[2] != null)
        {
            item.Username = proxyAdrs[2];
        }

        if (proxyAdrs[3] != null)
        {
            item.Password = proxyAdrs[3];
        }
}
else I suggest you get out :D

但是同样,检查proxyAdrs.Lenght将是最好的。

作者: bonCodigo 发布者: 2012 年 11 月 27 日

0

1664 作者的声誉

根据您是否形成输入数据(变量linesProxy),有两个选项可以为您提供帮助:

  1. 如果您确实形成输入数据:始终包括字符串的所有部分。对于您的情况,如果没有提供2nd的值,请始终proxyAdrs[3]通过:在1st和3rd值之间添加其他值来确保有4个(假设是最后一个)部分。因此,之后.Split()的操作(确保你不激活RemoveEmptyStrings选项)你proxyAdrs[2]null和你的样品将被罚款。
  2. 否则:如果proxyAdrs[2]是唯一的部分,则以下代码段可以为空可以防止崩溃:

    string[] proxyAdrs = linesProxy[i].Split(':');
    string proxyServer = proxyAdrs[0];
    int proxyPort = Convert.ToInt32(proxyAdrs[1]);    
    
    if(proxyAdrs.Length > 3)
    {
      if(proxyAdrs[2] != null)
          item.Username = proxyAdrs[2];
      if (proxyAdrs[3] != null)
          item.Password = proxyAdrs[3];
    }
    else
    {
     if(proxyAdrs[2] != null)
          item.Password = proxyAdrs[2];
    }
    
作者: Nogard 发布者: 2012 年 11 月 27 日

0

1 作者的声誉

try
{
    objCommonDD = new CommonDropDownBLL();
    objCommonDDEntity = new CommonDropdownEntity();

    //string strState=contextKey.ToString();
    string[] contextKeySplit = contextKey.Split('^');
    string strState = contextKeySplit[0].ToString();
    string strPin = contextKeySplit[1].ToString();

    objCommonDDEntity.TableName = "PCOM_PINCODES";
    objCommonDDEntity.DeleteField = "";
    objCommonDDEntity.TextField = "RTRIM(PIN_CITY_NAME) AS PC_DESC";
    objCommonDDEntity.ValueField = "DISTINCT PIN_CITY_CODE AS PC_CODE";

    objCommonDDEntity.StrCondition = " AND PIN_COUNTRY_CODE='IND' AND UPPER(PIN_CITY_NAME) LIKE UPPER('" + prefixText + "%') AND PIN_STATE_NAME='" + strState + "' AND PIN_CODE='" + strPin + "' ORDER BY PC_DESC";

    DataTable dtCity = new DataTable();
    dtCity = objCommonDD.GetData(objCommonDDEntity);

    string[] items = new string[dtCity.Rows.Count];
    int i = 0;

    for (i = 0; i < dtCity.Rows.Count; i++)
    {
        items.SetValue(dtCity.Rows[i]["PC_DESC"].ToString(), i);
    }

    return items;
}
作者: Deepika 发布者: 2015 年 6 月 18 日
32x32