我对我的代码有疑问:
我有一个播放器列表“私人列表播放器=新列表();”和Player是我自己疯狂的一个类,我还创建了一个Usercontrol,所有玩家的变量都是databinded。
它在我的主要形式中工作得非常好,但是当我改变形式时,我有一个奇怪的问题。
我将播放器列表作为参数提供给另一个表单,这里是代码:
public Result(List<Player> player, string format)
{
InitializeComponent();
_player = player;
ExtentionHelpers.Shuffle<Player>(_player);
}
Shuffle就像名字所说的那样,只是洗牌,但它应该洗牌_player,这是我的第二种形式的局部变量,我从不使用这种形式的玩家。
但是由于一些奇怪的原因,我的主要表单中的列表播放器最终也被洗牌了,我不希望这样,特别是在弄乱我的数据绑定时。
这里发生了什么?
答案 0 :(得分:0)
您的播放器变量是引用类型,因此它与您在两种形式中处理的数据相同。如果你想单独操作它,你需要克隆播放器列表。
调用构造函数时,请尝试以下操作:
var frm = new Result(new List<Player>(player), "some format");
创建新列表意味着如果您更改Player
类型中的数据,您可以独立于第一个 BUT 操作新列表,它会影响来自其他表单的数据(您如果你想要这个,你需要在添加到新列表之前单独克隆每个项目。