0

このメソッドの実行中:

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()
{
}
4

3 に答える 3

2

問題は、クラスに単一のをとるコンストラクターNorthwind.BO.Productsがないことです。publicDataRow

どんなコンストラクターを持っているのか教えてください。

于 2009-12-06T13:00:16.840 に答える
1

どのNorthwindクラスにもコンストラクターは必要ありません。例外によると、に正しいコンストラクターが必要Northwind.BO.Productsです。

さらに、Activator.CreateInstanceで使用されるように、このコンストラクターには、渡す引数と一致する正しい署名が必要です。引数を渡すため、デフォルトのコンストラクターは一致しません。

私があなたの質問を読んだとき、それはこのコンストラクターを持っているに違いありません

public Products(DataRow dr)
于 2009-12-06T13:00:04.297 に答える
0

コンストラクターのほとんどの署名は、おそらく指定している引数と一致しません。

于 2009-12-06T13:01:20.173 に答える