2014-02-09 20 views
0

我想檢查值(它的類型是列表),如果它爲空,它將從循環的開始處重新開始,如果不是,則返回counter ++。我的意思是如果值是這樣的:"values": []在循環開始時編譯回來。如何檢查列表<string>爲空

我嘗試了if (id==null) and also I used this one (id.Contains("")),但發生錯誤。 錯誤:索引超出範圍。必須是非負數且小於集合的大小。參數名稱:index(參數超出範圍的異常未處理)。

數據,我想檢查(當值是零)

{ 
    "cid": "241", 
    "fnames": [ 
    "id", 
    "name", 
    "hash", 
    "score", 
    "rank" 
    ], 
    "values": [], 
    "tal": 0, 
    "sion": "v3" 
} 

全部數據(當值不爲null)

{ 
    "cid": "64", 
    "fnames": [ 
    "id", 
    "name", 
    "hash", 
    "score", 
    "rank" 
    ], 
    "values": [ 
    [ 
     "126", 
     "126", 
     "126", 
     "1", 
     "2.77" 
    ], 
     "tal": 0, 
     "sion": "v3" 
    } 

代碼

foreach (DataRow row in dt.Rows) 
{ 
string url = "http://hgsfe/<uid>?groups=<uid> 
var test = url.Replace("<uid>", Convert.ToString(row[uid])); 
System.Diagnostics.Process.Start(test); 
string client = (new WebClient()).DownloadString(test); 
var pi = JsonConvert.DeserializeObject<read_json>(client); 
List<string> id = pi.values[0]; 
if (id==null)   //also I used this one (id.Contains("")) 
continue; 
if (id.Contains(Convert.ToString(row[tid]))) 
{ 
counter++; 
} 
+1

如果列表不包含任何字符串,它也不包含空字符串。我可以理解你爲什麼最初會這樣想,但試着多想一想,並且應該變得更清楚。 – hvd

+0

嗯......其實,你有沒有確定pi.values包含任何項目?如果那個沒有,你不能訪問'pi.values [0]'來檢查它是否是空的。另外,「行」有多少個元素?可能'tid'超出範圍嗎? – hvd

+0

您可以看到更多的代碼?這個'pi'是什麼? – dovid

回答

4

嘗試檢查列表中項目數量的pi.Countpi.Length

+0

沒有任何變化。顯示完全相同的錯誤@ DanielA.White。 – user3280040

+0

@ user3280040哪一行實際上是拋出異常消息? –

+0

列表 id = pi.values [0]; – user3280040

0

你必須同時檢查:

pi == null 
pi.values[0] == null 

,因爲你試圖轉讓,但PI不存在的事件(可能)

當您調試代碼,你可以清楚地看到,這裏的應用程序崩潰。

希望我可以幫你

+0

這些檢查都不可能阻止一個參數超出範圍異常。他們可以阻止空引用異常,但這不是OP得到的例外。 – hvd

+0

謝謝@Visionstar。但它不起作用 – user3280040

+0

太糟糕了=/ 請添加更多的代碼,也許錯誤發生在哪裏(哪一行) – Visionstar

0

請嘗試以下

List<string> id = pi.values.ToList(); 

並在此之後只是檢查列表Count財產

if(id.Count<1) 
    continue; 
... 
... 
0

你沒有提供的代碼有很多'未知',但這裏有什麼可能是錯的,你應該檢查它以使你的代碼更安全:

  • 什麼是uid?您正在訪問row[uid]row類型DataRow訪問不存在的項目(由uid指定)拋出異常
  • 什麼是pi?什麼是pi.values?也許你應該檢查,如果pi爲空,pi.values爲空,你應該肯定檢查是否pi.values包含任何項目(所以如果項目values[0]存在)。如果它的空然後values[0]會拋出你提到的異常。
  • pi.values[0]可能存在,但它可能再次被分配爲空。因此,您的行if (id.Contains...可能會因您試圖在空項目id上撥打id.Contains而失敗。在調用之前檢查它是否爲空。
  • 什麼是tidrow[tid]?再一次,檢查行中是否存在這樣的項目,以免得到DataRow異常。