在C#中,我应该按值传递参数并返回相同的变量,还是按引用传递?

鲁本9922

在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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

python pandas dataframe,是按值传递还是按引用传递

在Java中是按值传递数组还是按引用传递数组?

Kotlin是“按值传递”还是“按引用传递”?

在C#中按引用或值传递对象

在C ++中按值传递还是按常量引用传递更好?

Ruby是按引用传递还是按值传递?

PHP变量是按值还是按引用传递?

C:何时按值返回或传递引用

C#按值传递与按引用传递

我应该按引用还是按值传递大型数组?

vala是“按引用传递”还是“按值传递”?

复制赋值运算符应该按const引用还是按值传递?

C ++中的函数重载按值或按引用传递参数

.bind(this)是按引用还是按值传递?

ELM是按引用传递还是按值传递?

在python中自定义类对象的参数传递:按引用调用还是按值调用求值?

我应该按值还是按引用传递函数对象?

在Visual Studio 2010,C ++中,按值传递的参数在调试器中显示为按引用传递的参数

我是否正确理解C中的按值传递和按引用传递?

按值传递变量与按引用传递变量具有相同的结果

Array.find是否返回值或引用?我的意思是按值传递还是按引用传递?

在C ++线程中,我应该按值或引用传递shared_ptr吗?

我应该按值还是按r值引用来获取返回值?

c#对象按引用传递或按值传递

c#按值传递参数

C# 的 Queue.dequeue() 是按引用还是按值传递?

c#中按值传递数组

Java中的“按值传递”还是“按引用传递”?

在 C# 中“按名称”传递的参数