拆分 – 索引超出了数组的范围
我使用以下代码分割字符串并存储它:
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]有时候不在那里。
我怎么解决这个问题?
只需检查if语句中返回的数组的长度
if( proxyAdrs.Length > 2 && proxyAdrs[2] != null) { item.Username = proxyAdrs[2]; }
您获得exception的原因是split返回的数组小于您正在访问的索引。 如果要访问数组元素2
那么数组中必须至少有3
元素,因为数组索引以0
开头
您可以在通过索引访问其元素之前检查数组的长度。
更改
if(proxyAdrs[2] != null) { item.Username = proxyAdrs[2]; }
至
if(proxyAdrs.Length > 2 ) { item.Username = proxyAdrs[2]; }
试试这个:
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]; }
在尝试下标可能不存在的项目之前,请检查proxyAdrs
的长度。
if ( proxyAdrs.Length > 1 ) { item.Username = proxyAdrs[2]; }
这是你的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
将是最好的。
根据您是否形成传入数据(变量linesProxy
),有两个选项可以帮助您:
- 如果确实形成了传入数据:始终包含字符串的所有部分。 在您的情况下,如果没有提供第二个值,请始终确保您有4个(假设
proxyAdrs[3]
是最后一个)部分,通过添加额外的:
在第1和第3个值之间。 因此,在.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]; }
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; }