0

我的代码遇到问题,我向您解释我希望获得的内容:

  1. 我有一个带有字典的列表框,字典允许我将列表框的选择更改为更复杂的值

我的字典代码:

class RacesMask
{
    Dictionary<string, string> rMask = new Dictionary<string, string>();

    public RacesMask()
    {
        rMask.Add("Toutes", "-1");
        rMask.Add("Humains", "1");
        rMask.Add("Orcs", "2");
        rMask.Add("Nains", "3");
        rMask.Add("Elfes de la nuit", "4");
        rMask.Add("Mort-vivants", "5");
        rMask.Add("Taurens", "6");
        rMask.Add("Gnomes", "7");
        rMask.Add("Trolls", "8");
        rMask.Add("Gobelins", "9");
        rMask.Add("Elfes de Sang", "10");
        rMask.Add("Draeneis", "11");
        rMask.Add("Worgens", "22");
        rMask.Add("Pandarens", "24");
        rMask.Add("Sacrenuit", "27");
        rMask.Add("Tauren de Haut-Roc", "28");
        rMask.Add("Elfe du vide", "29");
        rMask.Add("Draeneï sancteforge", "30");
    }

    public Dictionary<string, string> GetRacesMask() { return rMask; }

}
  1. 现在,我希望当我选择我的 Listbox 的各种值时,它会进行计算,例如:

选择:人类(我的字典里有 1 个)和兽人(我的字典里有 2 个)

一个消息框向我显示结果 2 + 1 = 3

  1. 但是,实际上我的列表框只计算一个选定的值,而不计算其他值。

我的列表框代码:

private void listBox1_SelectedIndexChanged_1(object sender, EventArgs e)
    {
        RacesMask raceMask = new RacesMask();
        Dictionary<string, string> rM = raceMask.GetRacesMask();

        foreach (var rMask in listBox1.SelectedItems)
        {

            var selection1 = int.Parse(rM[rMask.ToString()]);
            var selection2 = int.Parse(rM[rMask.ToString()]);
            var total = selection1 + selection2;

            MessageBox.Show(total.ToString());

        }

当前结果的图片

预先感谢您的帮助

4

3 回答 3

1

您可以在循环外有一个变量total,然后将 ListBox 中每个选定项目的值相加,total如:

int total = 0;
foreach (var rMask in listBox1.SelectedItems)
{

    selection = int.Parse(rM[rMask.ToString()]);
    total = total + selection;

}

MessageBox.Show(total.ToString()); // now show the result finally.
于 2018-08-02T18:56:39.347 回答
1

您正在重置total循环的每次迭代。要么total在循环外声明变量并在每次迭代中添加它,要么您可以使用 LINQ:

private void listBox1_SelectedIndexChanged_1(object sender, EventArgs e)
{
    var raceMask = new RacesMask();
    var rM = raceMask.GetRacesMask();

    var total = (from s in listBox1.SelectedItems
                 select int.Parse(rM[s.ToString()]).Sum();

    MessageBox.Show(total);
}
于 2018-08-02T19:03:03.987 回答
0

你的逻辑有问题。它只会返回单个选择的值。试试这个:

private void listBox1_SelectedIndexChanged_1(object sender, EventArgs e)
{
    RacesMask raceMask = new RacesMask();
    Dictionary<string, string> rM = raceMask.GetRacesMask();
     int total = 0;
    foreach (var rMask in listBox1.SelectedItems)
    {
        total += int.Parse(rM[rMask.ToString()]);
    }
    MessageBox.Show(total.ToString());
于 2018-08-02T18:59:04.550 回答