我想检查值(它的类型是列表),如果它是null,它会从循环开始时再次开始,如果不是,则计数器++。我的意思是如果值类似于:"values": []
在循环开始时编译回来。
我尝试使用if (id==null) and also I used this one (id.Contains(""))
,但错误发生了。
错误:索引超出范围。必须是非负数且小于集合的大小。参数名称:index(参数超出范围异常未处理)。
我要检查的数据(当值为null时)
{
"cid": "241",
"fnames": [
"id",
"name",
"hash",
"score",
"rank"
],
"values": [],
"tal": 0,
"sion": "v3"
}
完整数据(当值不为空时)
{
"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++;
}
答案 0 :(得分:4)
尝试检查列表中的项目数pi.Count
或pi.Length
。
答案 1 :(得分:0)
您必须同时检查两者:
pi == null
pi.values[0] == null
因为您尝试了分配,但pi不存在事件(可能)
调试代码时,您可以清楚地看到应用程序崩溃的位置。
希望我能帮助你
答案 2 :(得分:0)
尝试以下
List<string> id = pi.values.ToList();
然后检查列表的Count
属性
if(id.Count<1)
continue;
...
...
答案 3 :(得分:0)
你确实提供了很多“未知数”的代码,但是这可能是错误的,你应该检查它以使你的代码更安全:
uid
?您正在访问row[uid]
。 row
的类型为DataRow
,其中访问不存在的项目(由uid
指定)会引发异常pi
?什么是pi.values
?也许您应该检查pi
是否为空,pi.values
为空,您应该明确检查pi.values
是否包含任何项目(因此如果项目values[0]
存在)。如果它为空,那么values[0]
将抛出你提到的异常。pi.values[0]
可能存在,但可能会再次指定为null。因此,您尝试在空项目if (id.Contains...
上调用id.Contains
时,您的行id
可能会失败。在调用之前检查它是否为空。tid
中的row[tid]
是什么?再次,检查行中是否存在此类项目,这样您就不会收到DataRow异常。