由于引用而导致不需要的成员更改

Unwanted member change because of reference

我正在编写一段代码,但无法弄清楚为什么它显示出一些(从我的角度来看)奇怪的行为。我明白这是因为我是如何编写代码的,但我不明白为什么它没有按照我的意愿去做。

我有一个事件处理程序:

private void heatFinishedHandler(object sender, List<Kart> e)
    {
        mainForm.enableControls();
        server.karts = e;
    }

如果我向它添加 e.Clear();,它也会清除 server.karts

参数e来自另一个class:

private List<Kart> kartlist = new List<Kart>();

heatFinished?.Invoke(this, kartlist);

heatFinished事件和heatFinishedEventHandler事件有关联。

我需要做什么才能按值而不是引用获取 e?或者它是一个值类型,但是它指向kartlist

我希望能够获取 e 的值并将其存储在 server.karts 中,而不能更改 kartlist.

复制传递给函数的列表,例如

private List<Kart> kartlist = new List<Kart>();

heatFinished?.Invoke(this, kartlist.ToList());

或者像

这样在函数内部做
private void heatFinishedHandler(object sender, List<Kart> e)
{
    mainForm.enableControls();
    server.karts = e.ToList();
}

.ToList() 将创建一个与原始列表实例具有相同值的新列表实例。