Model不包含带有8个参数的构造函数

时间:2014-09-25 19:09:46

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我是C#的新手,并且正在尝试设置一个非常基本的应用程序来创建类/模型:

public class Customer
    {
        public int CustomerID { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Address { get; set; }
        public string Zipcode { get; set; }
        public string City { get; set; }
        public string Email { get; set; }
        public string Phone { get; set; }
    }

现在,当我尝试从另一个类实例化客户对象时:

Customer c1 = new Customer(1, "Susan", "Peterson", "Borgergade 45", "8000", "Aarhus", "supe@xmail.dk", "21212121");

我明白了:

  

' PetParadiseHotel.Models.Customer'不包含构造函数   需要8个参数

根据我的理解,它应该有8个参数,所以这里有什么问题?

3 个答案:

答案 0 :(得分:3)

您必须为您的班级

创建一个构造函数
public class Customer
{
    public Customer(int customerID, string firstName, string lastName, string address,
                    string zipCode, string city, string email, string phone)
    {
        CustomerID = customerID;
        FirstName = firstName;
        // ...
        Phone = phone;
    }
    public int CustomerID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Address { get; set; }
    public string Zipcode { get; set; }
    public string City { get; set; }
    public string Email { get; set; }
    public string Phone { get; set; }
}

然后调用它(就像你做的那样)

var customer = new Customer(1, "Susan", "Peterson", "Borgergade 45", "8000", "Aarhus", "supe@xmail.dk", "21212121");

或者您可以使用对象初始值设定项:

var customer = new Customer() { CustomerID = 1, FirstName = "Susan" ... Phone = "21212121"}

答案 1 :(得分:2)

如果没有定义显式构造函数,则C#类具有默认构造函数。它看起来基本上就像:

public class Customer
{
    public Customer()
    {
    }

    ...
}

换句话说,它确实没有做任何事情,也没有任何争论。这允许您仅使用语法来新建它:

var customer = new Customer();

如果您希望能够将所有这些值传递给构造函数,则必须按以下方式创建自定义构造函数:

public class Customer
{
    public Customer(int customerId, string firstName, string lastName, string address, string zipCode, string city, string email, string phone)
    {
        CustomerId = customerId;
        FirstName = firstName;
        LastName = lastName;
        Address = address;
        ZipCode = zipCode;
        City = city;
        Email = email;
        Phone = phone;
    }

    ...
}

您还需要重新定义"默认"构造函数,或者你永远不能只是新建一个空的Customer

public Customer()
{
}

此外,如果您只想传递这些属性的某些子集而不是每个属性,则需要为每个子集创建其他构造函数,或者为任何未传入的参数提供构造函数的默认值。无论长短,这都是非常艰巨的,并使维护成为一场血腥的噩梦。值得庆幸的是,C#还具有所谓的对象初始化语法。您可以使用大括号代替括号,并明确设置要显示的每个属性:

var customer = new Customer
{
    CustomerId = 1,
    FirstName = "Susan",
    LastName = "Peterson",
    ...
}

这种方法的好处是你可以保留默认的构造函数,但仍然设置你想要的每个属性"初始化"。此外,您可以指定要初始化的任何属性子集,因此如果您不想设置Phone属性,请将其保留。一切都会好起来的。

答案 2 :(得分:0)

一般来说,我发现如果超过3个,那就是对设计进行快速健全性检查的标志。如果超过5,这是一个重要的警告,表明设计可能有问题。

然而,请注意“可能”这个词 - 最后,唯一真正的规则是使用尽可能多的功能,不多也不少。总会有例外和情况,其中更多参数最有意义。

如果参数以某种方式相关,则应将它们封装到容器类中。