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



我正在写一段代码,但无法弄清楚为什么它显示一些(从我的角度来看)奇怪的行为。我得到这是由于我如何写的代码,但我不能理解为什么它不做我想要它做的。

我有一个事件处理程序:

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

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

参数e来自另一个类:
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()将创建一个新的List-instance,其值与原来的List-instance相同。

最新更新