当我尝试将DataRow
中的值与json-string进行比较时,我得到以下错误:
超出范围异常的参数未处理。(索引超出范围。必须是非负数且小于集合的大小。\ r \ nParameter name:index)
uid
和tid
是从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++;
}
}
有什么想法吗?
答案 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]));
}