执行此方法时:
public static List<T> ToList<T>(DataTable dataTable)
{
Type type = typeof(T);
List<T> list = new List<T>();
foreach (DataRow dr in dataTable.Rows)
{
object[] args = new object[1];
args[0] = dr;
list.Add((T)Activator.CreateInstance(type, args));
}
return list;
}
我得到了这个例外:
Constructor on type 'Northwind.BO.Products' not found.
但我知道我已经在Products
类中声明了一个构造函数。
public class Products
{
private int _ProductID;
[DataMapping("ProductID", -99)]
public int ProductID
{
get { return _ProductID; }
set
{
if (_ProductID <= 0)
{
_ProductID = value;
}
else
{
throw new Exception("ID should not be set manually!");
}
}
}
private string _ProductName;
[DataMapping("ProductName", "")]
public string ProductName
{
get { return _ProductName; }
set { _ProductName = value;}
}
private int _SupplierID;
[DataMapping("SupplierID", -99)]
public int SupplierID
{
get { return _SupplierID; }
set { _SupplierID = value;}
}
private int _CategoryID;
[DataMapping("CategoryID", -99)]
public int CategoryID
{
get { return _CategoryID; }
set { _CategoryID = value;}
}
private string _QuantityPerUnit;
[DataMapping("QuantityPerUnit", "")]
public string QuantityPerUnit
{
get { return _QuantityPerUnit; }
set { _QuantityPerUnit = value;}
}
private decimal _UnitPrice;
[DataMapping("UnitPrice", -99.99)]
public decimal UnitPrice
{
get { return _UnitPrice; }
set { _UnitPrice = value;}
}
private short _UnitsInStock;
[DataMapping("UnitsInStock", -99)]
public short UnitsInStock
{
get { return _UnitsInStock; }
set { _UnitsInStock = value;}
}
private short _UnitsOnOrder;
[DataMapping("UnitsOnOrder", -99)]
public short UnitsOnOrder
{
get { return _UnitsOnOrder; }
set { _UnitsOnOrder = value;}
}
private short _ReorderLevel;
[DataMapping("ReorderLevel", -99)]
public short ReorderLevel
{
get { return _ReorderLevel; }
set { _ReorderLevel = value;}
}
private bool _Discontinued;
[DataMapping("Discontinued", false)]
public bool Discontinued
{
get { return _Discontinued; }
set { _Discontinued = value;}
}
public Products(object[] args)
{
}
public Products()
{
}
答案 0 :(得分:2)
问题是Northwind.BO.Products
类没有public
构造函数,只需要一个DataRow
。
你能告诉我们它有什么构造函数吗?
答案 1 :(得分:1)
您不需要任何Northwind
类的构造函数 - 根据例外,您需要Northwind.BO.Products
上的正确的构造函数。
此外,正如Activator.CreateInstance所使用的,此构造函数必须具有与您传递给它的参数匹配的正确签名。由于您要向其传递参数,因此默认构造函数将不匹配。
当我读到你的问题时,它必须有这个构造函数
public Products(DataRow dr)
答案 2 :(得分:0)
构造函数大多数签名可能与您提供的参数不匹配。