错误"无法转换' System.Int32'类型的对象输入' System.Collections.Generic.List`1 [System.Int32]'"

时间:2013-09-30 21:31:51

标签: c# asp.net generics collections

我有一个包裹递送应用程序,我在下面的代码中收到错误:

public class DeliveryDriver
{
    public List<int> DriverID { get; set; }
    public List<string> DriverName { get; set; }
}

var IDeliveryDriver = new List<DeliveryDriver>();

foreach (DataRow dr in dsDriverID.Tables[0].Rows)
{
    IDeliveryDriver.Add(new DeliveryDriver
    {
        DriverID = (List<int>)dr["DriverId"],
        DriverName = (List<string>)dr["DriverName"]
    });
}

错误发生在IDeliveryDriver.Add行,它进入了一个catch块。错误是:

  

无法将“System.Int32”类型的对象强制转换为类型   'System.Collections.Generic.List`1 [System.Int32]'

导致错误的原因是什么?

1 个答案:

答案 0 :(得分:4)

错误消息显示全部 - 每行中的DriverId字段为int,而不是List<int>。同上DriverNamestring,而不是List<string>。您应该将DriverIdDriverName属性分别更改为intstring,然后再将其转换为正确的类型:

public class DeliveryDriver
{
    public int DriverID { get; set; }
    public string DriverName { get; set; }
}

...

foreach (DataRow dr in dsDriverID.Tables[0].Rows)
{
    IDeliveryDriver.Add(new DeliveryDriver
    {
        DriverID = (int) dr["DriverId"],
        DriverName = (string) dr["DriverName"]
    });
}

毕竟,每个送货司机只有一个名字和一个身份证,不是吗?