在C#程序中,我制作了一种从列表中删除对象的方法。用户输入要删除的项目的索引,然后要求用户确认删除,如果用户确认,则从列表中删除该项目,否则列表保持不变。
我不确定将参数传递给方法的最佳方法。我尝试通过引用传递列表(作为out
参数):
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);
}
}
上面的代码不起作用,因为我收到错误消息,在控制离开当前方法之前,必须将未分配的局部变量'customers'和out参数'customers'分配给。我当时想我可以按值传递列表并返回相同的列表,如下所示:
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);
但这似乎效率不高,因为同一变量按值传递然后返回。
在这种情况下,传递参数的最有效方法是什么?
List
像所有引用类型一样,作为对对象的引用而不是其副本传递。
请注意,这与说它是通过引用传递的非常不同,因为这意味着参数的分配会传播到调用方,而不会
它的确意味着对对象的修改(例如由进行的修改RemoveAt
)将自动传播到调用者。
因此,只需通过它即可;无需返回值或out
/ref
参数。
您将很少使用out
/ref
作为引用类型,当将其用于值类型时,性能差异与返回值之间的差异将非常小,除非您已概要分析并确保问题在那里发生,否则您不必担心。使用最惯用的方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句