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