为什么我可以将项目添加到我的列表中,但不能重新分配它

本文关键字:新分配 但不能 分配 项目 我可以 添加 列表 我的 为什么 | 更新日期: 2023-09-27 18:31:25

这可能是

一个非常菜鸟的问题,但我无法完全理解为什么我可以将项目添加到我的列表中,为什么我不能将其设置为 null?

public class Test
{
    public List<string> Source { get; set; }
    public Test()
    { this.Source = new[] { "Hey", "hO" }.ToList(); }
}
class Program
{
    static void Main(string[] args)
    {
        Test test = new Test();
        ModifyList(test.Source);
        //Why here test.Source.Count() == 3 ? Why isn't it null ?
    }
    private static void ModifyList(List<string> list)
    {
        list.Add("Three");
        list = null;
    }
}

为什么调用修改列表后,测试。Source.Count() == 3 ?为什么它不为空?

我本来希望该列表要么为 NULL,要么在两个元素中保持不变。

有人可以向我解释发生了什么吗?谢谢!

为什么我可以将项目添加到我的列表中,但不能重新分配它

这是一种 C# 行为。您正在将list设置为指向null,而不是原始列表。

应使用 ref 关键字来修改原始变量。

class Program
{
    static void Main(string[] args)
    {
        Test test = new Test();
        ModifyList(ref test.Source);
        //Why here test.Source.Count() == 3 ? Why isn't it null ?
    }
    private static void ModifyList(ref List<string> list)
    {
        list.Add("Three");
        list = null;
    }
}

在这种方法中,

private static void ModifyList(List<string> list)

list参数是按值传递的引用。您正在添加到引用的列表,这是正常操作。然后,您将 by-valye 副本设置为 null 。但原始参考文献(test.Source)保持不变。

在所有代码中,只有 1 个 List<string> 实例,但在不同的时间有多个引用指向它。

通过执行list = null;,您将新值分配给本地标识符list 。您不会更改(删除)以前存储在其中的对象。

相关文章: