Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于c#列表发送还是返回?_C#_List - Fatal编程技术网

关于c#列表发送还是返回?

关于c#列表发送还是返回?,c#,list,C#,List,我有一个问题。我必须用一个方法从sql数据库中填充一个列表。我的问题是: 最好这样做: List<Product> listProducts = new List<Product>(); listProducts = loadProducts(); //this code is in other class public List<Product> loadProducts() { List<Product > listProduct =

我有一个问题。我必须用一个方法从sql数据库中填充一个列表。我的问题是:

最好这样做:

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 listProducts=new List();
listProducts=loadProducts();
//此代码位于其他类中
公共列表加载产品()
{
列表产品=新列表();
//代码
退货清单产品
}
或者最好是这样:

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
}
List listProducts=new List();
listProducts=loadProducts(listProducts);
//此代码位于其他类中
公共列表加载产品(列表加载产品)
{
//代码
退货清单产品
}
抱歉,如果这是一个noob问题,但两个都可以,但我不知道哪一个更好


非常感谢。

我想退货。除非在发送列表时,列表内容中有什么内容,否则我认为没有理由将其作为参数传递。

您的第一个选项要好得多。意义明确,无副作用

您的第二个选项将返回列表并填充传递给它的列表。我会考虑填写我通过的名单是一个不好的副作用。

< P>不,真的。

你应该这样做:

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

选项1创建一个新列表只是为了稍后覆盖它。选项2不必要地将一个列表传递给该方法,该方法只会将其发送回修改后的列表

我同意第一种方法

向该方法传递一个列表,然后填充并返回该列表,这似乎有些毫无意义。

List<Product> listProducts = loadProducts();

//this code is in other class
public List<Product> loadProducts()
{
    List<Product > listProduct = new List<Product> ();
    //code        
    return listProduct
}
List listProducts=loadProducts();
//此代码位于其他类中
公共列表加载产品()
{
列表产品=新列表();
//代码
退货清单产品
}

第一个选项更好。如果您将第二个选项设置为void函数并将列表作为参考参数,那么第二个选项也不错,但选项一更好,因为函数所需的原始列表中没有任何内容。

考虑到在任何情况下,您都希望传递现有列表(其中已经有内容)要增加,我喜欢第一个选项,因为它在第一个方法中更可读,使用
List listProducts=new List()您正在创建一个新的空列表(下一行指定一个新的列表实例)。只需执行
List listProducts=loadProducts(listProducts)我尽量减少副作用,因为我发现这样可以减少代码的混乱。在现代硬件上创建对象很便宜——不要害怕。我避免使用第二种方法,并且该习惯用法不会出现在我的代码中。(我记得的一个例外是在使用DataTables时,但这是一个非常特殊且值得注意的情况。)如果确实修改传入的列表,请使用一个void返回类型,以便调用方“知道”该操作使用了副作用。(考虑
List.Add
作为遵循该规则的方法。)好的,谢谢,我想,但是第二个代码(pass List作为参数)是我从一个旧的源代码复制的,现在我认为它是不正确的,但是如果有一天我做了它,可能是因为什么(或者可能是坏的),无论如何,谢谢。