我正在写一段代码,但无法弄清楚为什么它显示一些(从我的角度来看)奇怪的行为。我得到这是由于我如何写的代码,但我不能理解为什么它不做我想要它做的。
我有一个事件处理程序:
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相同。