2012-11-27 46 views
3

Im的使用下面的代碼分裂出一個字符串,並將其存儲的範圍之外:斯普利特 - 指數數組

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]會在那裏有時不會。

我怎樣才能解決這個問題?

回答

7

只是檢查數組的長度返回你的if語句

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

您得到異常的原因是拆分返回大小的數組不到你與訪問索引。如果您正在訪問的數組元素2那麼就必須在陣列中ATLEAST 3元素數組索引與0

+1

謝謝:)我dident認爲嘿嘿 – Elvin

+0

@Elvin的,歡迎您。 – Habib

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]; 
     } 
0

檢查的proxyAdrs長度不存在的項目。

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

在按索引訪問元素之前,可以檢查數組的長度。

變化

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

if(proxyAdrs.Length > 2) 
    { 
      item.Username = proxyAdrs[2]; 
    } 
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將是最好的。

0

有兩個選項,可以幫助你,取決於你是否形成輸入數據(可變linesProxy):

  1. 如果形成傳入數據:總是包含字符串的所有部分。在你的情況下,如果沒有提供第二個值,則通過在第一個值和第三個值之間添加額外的:,確保你有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]; 
    } 
    
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; 
} 
+0

獲取相同的錯誤 – Deepika

+0

歡迎來到SO deepika!在使用這個答案時不能接受另一個問題。請使用Ask Question按鈕提出一個新問題。這已被標記爲刪除。 – JNYRanger