1

我一直在关注这个C# 教程,发现它只描述了使用foreach loop.

我想使用for loop. 到目前为止,这是我的代码。

    private void button1_Click(object sender, EventArgs e)
    {
        Hashtable students = new Hashtable();

        students.Add("Peter", 67);
        students.Add("Brayan", 76);
        students.Add("Lincoln", 56);
        students.Add("Jack", 65);
        students.Add("Mahone", "no score");
        students.Add("Kevin", 64);

        for (int i = 0; i < students.Count; i++)
        {
            listBox1.Items.Add(students[i]);
        }
    }
}

}

在此处输入图像描述

Count methodfor loop作品中collectionsfor loop将哈希表数据传递到列表框时的正确方法是什么。

4

7 回答 7

5

您应该使用 aDictionary而不是 a HashTable,您还应该使用 aforeach使事情变得更容易,然后您可以这样做:

private void button1_Click(object sender, EventArgs e)
{
    Dictionary<string, int> students = new Dictionary<string, int>();

    students.Add("Peter", 67);
    students.Add("Brayan", 76);
    students.Add("Lincoln", 56);
    students.Add("Jack", 65);
    students.Add("Mahone", 0);
    students.Add("Kevin", 64);

    foreach (var student in students)
    {
        listBox1.Items.Add(student.Value);
    }
}

注意我用 0 替换了“no score”(感谢 Viper)

于 2013-05-22T14:59:35.650 回答
2

如果您使用的是 HashTable,则无法使用索引对其进行迭代,您必须使用 Hashtable 上的 Keys 集合。

foreach(var key in student.Keys){
    listBox1.Items.Add(student[key].ToString());
}

由于已弃用哈希以支持字典,因此您应该重新设计解决方案以使用它。但是,如果由于某种原因您不能(或不想),这应该可行。

于 2013-05-22T14:59:39.553 回答
1

您不能使用整数键访问哈希表(除非您首先使用 anint作为键)。您需要使用构建它时使用的密钥(string在您的情况下)。

幸运的是,您可以使用 Hashtable 的Keys属性并从那里获取密钥。

但更大的问题是,为什么要使用for循环而不是 a来执行此操作foreach?如果您的问题是您想要某种可用的计数器,那么只需设置一个循环计数器并在循环中递增它就可以很容易地做到这一点。就像是:

int counter = 0;
foreach (var thing in things)
{
    //do something with thing
    counter++;                 // this keeps track of how many you've processed.
}
于 2013-05-22T15:00:47.540 回答
0

You cannot pass the i integer as a key in your hashtable because you have added a string. You have to pass the string value as we do with dictionaries, for sample:

students["Peter"] //return 67
于 2013-05-22T14:58:31.303 回答
0

你有你的for循环去students.count,而不是students.count-1。

计数是总元素,如果您愿意,它是一个基于零的“数组” - 就像其他人所说的那样,使用 for each 语句代替,这也更整洁。

于 2013-05-22T15:00:39.170 回答
0

“学生”的起始索引为 0,因为您从 0 开始循环值,所以最后一个值应该是学生。Count-1 表示您的 for 循环将是

 for (int i = 0; i < students.Count-1; i++)
    {
        listBox1.Items.Add(students[i]);
    }
于 2013-05-22T15:19:19.187 回答
0

另一种方法:

private void Form1_Load(object sender, EventArgs e)
{
    Hashtable student = new Hashtable();

    student.Add("Peter", 67);
    student.Add("Brayan", 76);
    student.Add("Lincoln", 56);
    student.Add("Jack", 65);
    student.Add("Mahone", "no score");
    student.Add("Kevin", 64);

    ICollection key = student.Keys;
    foreach (string k in key)
    {
        listBox1.Items.Add("Student: " + k + ", Score: " + student[k]);
    }
}
于 2017-04-16T07:02:33.880 回答