2009-06-01 17 views
11

Próbuję wygenerować kod w usłudze sieci Web. Ale to powrót 2 błędy:jak ustawić "jest typem, ale jest używany jako zmienna"?

1) Lista jest typem, ale jest stosowany jak zmienną

2) Nie przeciążenie dla metody „klient” trwa jak mogę „3 argumenty”

[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; } } 
    } 

dostosować powyższy błąd?

+2

Wykorzystanie 'new' kluczowego przed' List' klasy –

Odpowiedz

30

Problem polega na linii

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

trzeba dodać "nowy"

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

Dodatkowo do następnego wiersza powinny być:

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

EDIT: Jeśli używasz VS2005, musisz utworzyć nowy konstruktor, który pobiera 3 pa rameters.

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

+1, ale lepszym rozwiązaniem drugiego komunikatu o błędzie jest utworzenie konstruktora, który akceptuje trzy argumenty. –

+1

Twoje ostatnie stwierdzenie zakłada 3.0 oczywiście, w przeciwnym razie musimy założyć, że zapomniał dać nam konstruktora :) – annakata

+0

@annakata: Ta sama myśl przyszła mi do głowy! – Cerebrus

4

This

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

musi być:

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

i trzeba utworzyć konstruktor klienta, który przyjmuje 3 argumenty, które chcesz przekazać. Domyślny konstruktor klienta nie przyjmuje argumentów.

2

Aby odpowiedzieć na drugie pytanie:

albo trzeba utworzyć konstruktor, że trwa trzy argumenty:

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

lub ustawić wartości po obiekt został stworzony:

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

Ponieważ wszystkie właściwości w klasie Customer mają selektorów publicznych, nie musisz absolutnie mieć do cr eate konstruktora (jak większość zasugerowała). Masz również alternatywą do korzystania z konstruktora bez parametrów i ustawić domyślne właściwości obiektu:

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