由于引用而导致不需要的成员更改
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()
将创建一个与原始列表实例具有相同值的新列表实例。
我正在编写一段代码,但无法弄清楚为什么它显示出一些(从我的角度来看)奇怪的行为。我明白这是因为我是如何编写代码的,但我不明白为什么它没有按照我的意愿去做。
我有一个事件处理程序:
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()
将创建一个与原始列表实例具有相同值的新列表实例。