将<string>列入字符串并且“参数超出范围异常未处理”错误</string>

时间:2014-02-07 12:26:39

标签: c# json

当我尝试将DataRow中的值与json-string进行比较时,我得到以下错误:

  

超出范围异常的参数未处理。(索引超出范围。必须是非负数且小于集合的大小。\ r \ nParameter name:index)

uidtid是从DataSet表格中提取的整数:

int uid=0;
int tid=0;
int counter = 0;
foreach (DataRow row in dt.Rows)
{ 
    string url = "aewrf/<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.field_values[0]; //error happens at this line
    string ids = Convert.ToString(id); 
    if (ids == Convert.ToString(row[tid])) 
    { 
        counter++; 
    } 
}  

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

这是由于数组行的长度小于tid的值。

更改if条件以克服此异常:

if (ids == Convert.ToString(row.Length>tid?row[tid]:""))

答案 1 :(得分:0)

以此为例

using System;
using System.Collections.Generic;
using System.Text;

class Program
{
    static void Main()
    {
    List<int> safePrimes = new List<int>(); // Create list of ints
    safePrimes.Add(5); // Element 1
    safePrimes.Add(7); // Element 2
    safePrimes.Add(11); // Element 3
    safePrimes.Add(23); // Element 4

    StringBuilder builder = new StringBuilder();
    foreach (int safePrime in safePrimes)
    {
        // Append each int to the StringBuilder overload.
        builder.Append(safePrime).Append(" ");
    }
    string result = builder.ToString();
    Console.WriteLine(result);
    }
}

输出

  

5 7 11 23

参考Here

答案 2 :(得分:0)

没有回答你的实际问题,也许有点不好意思我会用String.Format形成你的网址 - 而不是你的foreach。每次重新创建字符串并使用replace似乎效率低下。

string urlFormat = @"aewrf/{0}?groups={0}";

foreach (var row in x)
{
    string url = String.Format(urlFormat, Convert.ToString(row[uid]));
}