Как настроить "является типом, но используется как переменная"?

Я пытаюсь создать код в веб-службе. Но он возвращает 2 ошибки:

1) Список - это тип, но используется как переменная

2) Нет перегрузки для метода "Клиент" принимает "3 аргумента"

[WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [ToolboxItem(false)]
    public class wstest : System.Web.Services.WebService
    {

        [WebMethod]
        public List<Customer> GetList()
        {
            List<Customer> li = List<Customer>();
            li.Add(new Customer("yusuf", "karatoprak", "123456"));
            return li;
        }
    }

    public class Customer
    {
        private string name;
        private string surname;
        private string number;

        public string Name { get { return name; } set { name = value; } }
        public string SurName { get { return surname; } set { surname = value; } }
        public string Number { get { return number; } set { number = value; } }
    }

Как я могу настроить ошибку выше?

Ответ 1

Проблема заключается в строке

List<Customer> li = List<Customer>();

вам нужно добавить "новый"

List<Customer> li = new List<Customer>();

Дополнительно для следующей строки должно быть:

li.Add(new Customer{Name="yusuf", SurName="karatoprak", Number="123456"});

EDIT: Если вы используете VS2005, вам нужно создать новый конструктор, который принимает 3 параметра.

public Customer(string name, string surname, string number)
{
     this.name = name;
     this.surname = surname;
     this.number = number;
}

Ответ 2

Это

List<Customer> li = List<Customer>();

должно быть:

List<Customer> li = new List<Customer>();

и вам нужно создать конструктор Customer, который принимает три аргумента, которые вы хотите передать. Конструктор клиента по умолчанию не принимает аргументов.

Ответ 3

Чтобы ответить на второй вопрос:

Вам либо нужно создать конструктор, который принимает три аргумента:

public Customer(string a_name, string a_surname, string a_number)
{
     Name = a_name;
     SurName = a_surname;
     Number = a_number;
}

или задайте значения после создания объекта:

Customer customer = new Customer();
customer.Name = "yusuf";
customer.SurName = "karatoprak";
customer.Number = "123456";
li.Add(customer);

Ответ 4

Поскольку все свойства класса Customer имеют публичные сеттеры, вам не обязательно создавать конструктор (как это было предложено большинством). У вас также есть альтернатива использовать конструктор без параметров без параметров и задать свойства объекта:

Customer c = new Customer();
c.Name = "yusuf";
c.SurName = "karatoprak";
c.Number = "123456";
li.Add(c);