2011-08-16 68 views
4

我有一個問題。我必須做一個方法,從sql數據庫填充一個列表<對象>。我的問題是:關於c#列表發送或退貨?

這是更好地做到這一點:

List<Product> listProducts = new List<Product>(); 
listProducts = loadProducts(); 

//this code is in other class 
public List<Product> loadProducts() 
{ 
    List<Product > listProduct = new List<Product>(); 
    //code   
    return listProduct 
} 

或者是更好的:

List<Product> listProducts = new List<Product>(); 
listProducts = loadProducts(listProducts); 

//this code is in other class 
public List<Product> loadProducts(List<Product> listProduct) 
{ 
    //Code   
    return listProduct 
} 

很抱歉,如果這是一個小白的問題,但都兩部作品,但我不知道這是更好的改善。

非常感謝。

+1

在你的第一種方法,用'名單 listProducts =新列表();'你爲空白創建一個新的空列表(下一行指定一個新的列表實例)。只是'列表 listProducts = loadProducts(listProducts);' –

+0

我儘量減少副作用,因爲我發現它會導致代碼混亂。在現代硬件上創建對象很便宜*不要害怕它。我避免了第二種方法,這個成語沒有出現在我的代碼中。 (我能記得的一個例外是使用DataTable時,但這是一個非常特殊和注意的情況。)如果* do *修改了傳入的List,*請使用void返回類型*,因此調用者「知道」該手術利用副作用。 (考慮將'List.Add'作爲遵循該規則的方法。) – 2011-08-16 18:22:27

回答

4

轉到這個

List<Product> listProducts = loadProducts(); 

//this code is in other class 
public List<Product> loadProducts() 
{ 
    List<Product > listProduct = new List<Product>(); 
    //code   
    return listProduct 
} 
+0

謝謝大家:D – uoah

6

我寧願退貨。除非發送時列表中的內容有什麼內容,否則我沒有看到將其作爲參數傳遞的理由。

+1

好的,謝謝,我認爲,但第二個代碼(通過列表作爲參數)我從我有的舊源複製,現在我認爲這是不正確的,但如果有一天我做了它,也許是爲了某些東西(或者可能是壞的)。無論如何,非常感謝。 – uoah

1

你的第一個選擇要好得多。它有明確的意義,沒有副作用。

您的第二個選項將返回列表以及填寫傳遞給它的列表。我會考慮填補我通過的名單是一個副作用,這是不受歡迎的。

7

不是,真的。

你應該只去像這樣:

List<Product> listProducts = loadProducts(); 

選項1,使一個新的列表,後來纔將其覆蓋。選項2不必要地將一個列表傳遞給該方法,該方法只會將其發回修改。

1

我會用第一種方法。

這似乎有點毫無意義的傳遞方法列表,然後將填充和返回。

1

第一個選項是更好的。第二種選擇並不壞,如果你把它作爲一個無效函數,並把列表作爲參考參數,但是選項一更好,因爲函數原始列表中沒有任何東西需要用到。

+0

好的,謝謝我認爲。 – uoah

0

考慮,在任何情況下,你想通過現有列表(帶的東西已經有了)將要增加我喜歡的第一個選項,因爲它更具有可讀性