2010-09-23 175 views
3

這是我第一次使用Lists,而且我似乎沒有弄清楚它的正確性。我有一個客戶類在Customer類物業客戶的列表(可以像這樣做嗎?)非靜態字段,方法或屬性需要對象引用

public class Customer 
{ 
    private List<Customer> customers = new List<Customer>(); 

    public List<Customer> Customers 
    { 
     get { return customers; } 
     set { customers = value; } 
    } 

在我的節目,我加入到這個客戶名單如下:

Customer C = new Customer(); 
Customer.InputCustomer(C); 
C.Customers.Add(C); 

現在我需要顯示這個列表中的客戶。我添加了一個AllCustomers功能Customer類是這樣的:

public static void AllCustomers() 
    { 
     foreach (Customer customer in Customers) //Fail on "Customers" 
     { 
      Console.WriteLine("Customer ID: " + customer.ID); 
      Console.WriteLine("Customer Name: " + customer.FullName); 
      Console.WriteLine("Customer Address: " + customer.Address); 
      Console.WriteLine(); 
     } 
    } 

但我得到這個錯誤在foreach語句:

的對象引用需要非靜態字段,方法,或屬性'AddCustomerList.Customer.Customers.get'

就像我說的,這是我第一次使用列表,馬比我不明白它的權利?誰能幫幫我嗎?

回答

5

問題是您試圖從static方法中訪問非靜態屬性Customers

我懷疑你想要的東西是這樣的:

public void AllCustomers() 
{ 
    // ... 

(即擺脫static修飾符的)

或者,也可以使雙方customersCustomers成員靜態太:

private static List<Customer> customers = new List<Customer>(); 

public static List<Customer> Customers 
{ 
    get { return customers; } 
    set { customers = value; } 
} 
+0

This Works!謝謝! :-) – CSharpSuzie 2010-09-23 06:05:15

+0

正如我對另一個(現在刪除的)答案進行了評論,使'客戶'和'客戶'靜態不是一個好主意,這意味着每個'客戶'實例將共享相同的客戶列表每個列表中的「客戶」,永遠)。鑑於你的答案是可以接受的,我建議刪除'或者'... – Benjol 2010-09-23 06:18:57

3

它失敗,因爲AllCustomers()是一種靜態方法。從它刪除'靜態',它應該按照您的預期進行編譯和工作。

2

由於Gonzalo says,您需要從AllCustomers方法中刪除static

或者,您可以在將客戶列表傳遞給AllCustomers方法,該方法可以繼續保持靜態。

public static void AllCustomers(List<Customer> customers) 

不過,我很好奇,爲什麼你有客戶名單客戶類 - 這是因爲你的客戶有自己的客戶?

相關問題