我使用以下代码拆分字符串并存储它:
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]会在那里。
我该如何解决这个问题?
答案 0 :(得分:8)
只需检查if语句中返回的数组的长度
if( proxyAdrs.Length > 2 && proxyAdrs[2] != null)
{
item.Username = proxyAdrs[2];
}
您获得异常的原因是split会返回大小小于您正在访问的索引的数组。如果您正在访问数组元素2
,那么数组中必须有至少3
元素,因为数组索引以0
开头
答案 1 :(得分:2)
您可以在通过索引访问其元素之前检查数组的长度。
更改
if(proxyAdrs[2] != null)
{
item.Username = proxyAdrs[2];
}
要
if(proxyAdrs.Length > 2 )
{
item.Username = proxyAdrs[2];
}
答案 2 :(得分: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];
}
答案 3 :(得分:0)
在尝试下标可能不存在的项目之前检查proxyAdrs
的长度。
if ( proxyAdrs.Length > 1 ) {
item.Username = proxyAdrs[2];
}
答案 4 :(得分:0)
您的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
将是最好的。
答案 5 :(得分:0)
根据您是否形成传入数据(变量linesProxy
),有两个选项可以帮助您:
proxyAdrs[3]
来确保您有4个(假设:
是最后一个)部分。因此,在.Split()
操作后(确保您未激活RemoveEmptyStrings
选项),您的proxyAdrs[2]
将为null
,您的样本将会很好。否则:如果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];
}
答案 6 :(得分: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;
}