如何检查List <string>为空</string>

时间:2014-02-09 17:07:56

标签: c#

我想检查值(它的类型是列表),如果它是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++;
}

4 个答案:

答案 0 :(得分:4)

尝试检查列表中的项目数pi.Countpi.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异常。