6

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

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] 有时不存在。

我该如何解决这个问题?

4

7 回答 7

10

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

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

您收到异常的原因是拆分返回的数组大小小于您正在访问的索引。如果您正在访问数组元素,2则数组中必须至少有3元素,因为数组索引以0

于 2012-11-27T09:35:36.500 回答
2

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

改变

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

   if(proxyAdrs.Length > 2 )
   {
            item.Username = proxyAdrs[2];
   }
于 2012-11-27T09:36:11.007 回答
0

试试这个:

        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];
        }
于 2012-11-27T09:36:01.143 回答
0

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

if ( proxyAdrs.Length > 1 ) {
  item.Username = proxyAdrs[2];
}
于 2012-11-27T09:36:08.830 回答
0

这是您的iwhich 可能低于2您尝试设置为索引的 :)

if i >= 2然后你可以做所有的folwing:----

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将是最好的。

于 2012-11-27T09:38:48.900 回答
0

有两个选项可以帮助您,具体取决于您是否形成传入数据(变量linesProxy):

  1. 如果您确实形成传入数据:始终包括字符串的所有部分。在您的情况下,如果没有提供 2nd 的值,请始终通过在 1st 和 3rd 值之间添加额外的值来确保您有 4 个(假设proxyAdrs[3]是最后一个)部分。:因此,.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];
    }
    
于 2012-11-27T09:54:33.127 回答
0
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;
}
于 2015-06-18T11:21:32.407 回答