在C#程序中,我制作了一个从列表中删除对象的方法。用户输入要删除的项目的索引,然后要求用户确认删除,并且如果用户确认该项目从列表中移除,否则该列表保持不变。
我不确定将参数传递给方法的最佳方式。我试图通过引用传递列表(作为out
参数):在C#中,我应该通过值传递一个参数并返回相同的变量,或通过引用?
static void DeleteCustomer(out List<Customer> customers)
{
// ...display list of objects for user to choose from...
int deleteId = ReadInt("Enter ID of customer to delete: ");
Console.Write("Are you sure you want to delete this customer?");
if (Console.ReadLine().ToLower() == "y")
{
customers.RemoveAt(deleteId);
}
}
,因为我得到了错误使用未分配的局部变量的“客户”和的输出参数的客户上面的代码不起作用'必须在控制离开当前方法之前分配。我想我可以按值传递的列表,并返回相同的列表,像这样:
static List<Customer> DeleteCustomer(List<Customer> customers)
{
int deleteId = ReadInt("Enter ID of customer to delete: ");
Console.Write("Are you sure you want to delete this customer?");
if (Console.ReadLine().ToLower() == "y")
{
customers.RemoveAt(deleteId);
}
return customers;
}
// ...which would be called from another method with:
List<Customer> customers = DeleteCustomer(customers);
,但这似乎并不有效,因为相同的变量是按值传递之后返回。
在这种情况下传递参数的最有效方法是什么?
列表自动通过引用传递,因此不需要返回它。调用方法将看到在对传递列表的引用中反映的更改。 –
user469104
2014-12-02 18:27:07
请参见:[参数在C#中传递 - Jon Skeet](http://www.yoda.arachsys.com/csharp/parameters.html)。也可以尝试第二种方法,但不返回列表,您将看到它已被更改。这是因为引用类型的地址是按值传递的。 **但重要的是**,你不应该担心效率*现在*,考虑编写代码来更清楚地表达意图,并且稍后才会寻求提高性能。 – Habib 2014-12-02 18:29:01
第二种方法可以有一个返回类型'void'。 – 2014-12-02 18:31:07