我正在构建游戏应用程序。在我的表单上,我有一个datagridview,我想将不同参与者所做出的选择绑定到其中。
我有一个特定的PlayerClass,已将其放在名为Players的列表中。
public class PlayerClass
{
public int Id {get; set;}
public string Name {get; set;}
public List<bool> choices {get; set;}
}
Public List<PlayerClass> Players;
在此列表中,我将添加玩家针对不同问题做出的选择。
要显示所做的选择,我想将结果合并到datagridview中,其中每个参与者都有一列,每一行代表该参与者针对特定问题给出的答案。
因此,我正在考虑创建一个包含新类的列表,该类包含由不同参与者给出的所有问题的答案。
public class ChoicesViewClass
{
public bool ChoicePlayer1 { get; set; }
public bool ChoicePlayer2 { get; set; }
public bool ChoicePlayer3 { get; set; }
public bool ChoicePlayer4 { get; set; }
}
但是如何使用Linq从第一个列表的第二个列表中填充Choices?
我正在尝试这样的事情:
grdChoices.DataSource = Players
.Select(s => new ChoicesViewClass{ ChoicePlayer1 = s, ChoicePlayer2 = s, ChoicePlayer3 = s, ChoicePlayer4 = s })
.ToList();
但是s
是我被困住的地方。
我该怎么解决?
谢谢。
答案 0 :(得分:6)
您正在尝试按索引访问玩家的选择吗?默认情况下,玩家选择列表的长度是否为4?这将解决您的问题:
grdChoices.DataSource = Players
.Select(s => new ChoicesViewClass{ ChoicePlayer1 = s.choices[0], ChoicePlayer2 = s.choices[1], ChoicePlayer3 = s.choices[2], ChoicePlayer4 = s.choices[3] })
.ToList();
但是我有点困惑,为什么要使其复杂化呢?播放器为什么不能具有ChoicesViewClass的属性?像这样:
public class PlayerClass
{
public int Id {get; set;}
public string Name {get; set;}
public ChoicesViewClass choices {get; set;}
}