加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 08:46:00 所属栏目:百科 来源:网络整理
导读:在C#程序中,我创建了一个从列表中删除对象的方法.用户输入要删除的项目的索引,然后要求用户确认删除,如果用户确认,则从列表中删除该项目,否则列表保持不变. 我不确定将参数传递给方法的最佳方法.我尝试通过引用传递列表(作为out参数): static void DeleteCu
在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);

但这似乎并不高效,因为相同的变量按值传递然后返回.

在这种情况下传递参数的最有效方法是什么?

解决方法

像所有引用类型一样的列表,作为对象的引用传递,而不是它的副本.

请注意,这与它通过引用传递非常不同,因为这意味着参数的赋值传播给调用者,它不会

它确实意味着对对象的修改(例如由RemoveAt执行的修改)将自动传播给调用者.

因此,只需通过它;不需要返回值或out / ref参数.

您很少会使用out / ref作为引用类型,并且当用于值类型时,性能差异将非常小而不是返回,除非您已经进行了分析并确保问题出现在那里,否则您不必担心它.使用最具惯用意义的东西.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读