所以当我发生这种奇怪的行为时,我只是编码:
public NumPadComboListener(List<String> master)
{
_listen = new MultiKeyListener(false);
List<String> seq = master;
seq.Add("NumPad0");
_listen.registerNewKeySequence(0, seq);
seq.Remove("NumPad0");
seq.Add("NumPad1");
_listen.registerNewKeySequence(1, seq);
seq.Remove("NumPad1");
seq.Add("NumPad2");
_listen.registerNewKeySequence(2, seq);
seq.Remove("NumPad2");
seq.Add("NumPad3");
_listen.registerNewKeySequence(3, seq);
seq.Remove("NumPad3");
seq.Add("NumPad4");
_listen.registerNewKeySequence(4, seq);
seq = null;
}
它只是放入一个列表列表。 但奇怪的是,最后的列表包含了传入的最后一个版本“seq”的5个副本。
elem 1, elem2, NumPad4
elem 1, elem2, NumPad4
elem 1, elem2, NumPad4
elem 1, elem2, NumPad4
elem 1, elem2, NumPad4
如何将列表作为单独的实例传递而不是像现在看起来那样的引用?
答案 0 :(得分:0)
如何将列表作为单独的实例传递而不是像现在看起来那样的引用?
您必须显式创建一个全新的列表,并传入对该新列表的引用。您可以使用ToList
使用非常少的代码执行此操作,即使在幕后它仍然需要将每个项目复制到创建的新列表。
然后,您需要相应地更改所有方法调用:
_listen.registerNewKeySequence(0, seq.ToList());
如果您不希望此方法改变传入的master
列表,那么您还需要复制列表本身(而不是对它的引用) )在方法开始时将新列表分配给seq
。