C#列表框数组问题

C# listbox array trouble

所有。我正在创建一个程序,它将团队列表作为字符串数组并将其与包含所有世界系列赛获胜者列表的 .txt 文件进行比较,并根据您选择的团队确定一个团队赢得世界系列赛的次数select 在列表框中。

我的代码抛出 0 个错误,我第一次 运行 程序和 select 编辑了一个团队并单击了按钮,它显示了显示团队名称和他们获胜次数的消息框.之后,每当我再次选择一个团队并单击按钮时,都没有任何反应。它只是冻结。然后我必须停止调试。可能出了什么问题?有什么想法和建议吗?

namespace WorldSeriesWinners
{
    public partial class Form1 : Form
   {
        string[] inputTeams = 
        { 
          "Boston Americans", "New York Giants", "Chicago White Sox","Chicago Cubs",
          "Pittsburgh Pirates", "Philadelphia Athletics","Boston Red Sox", "Boston Braves",
          "Cincinatti Reds", "Cleveland Indians","Brooklyn Dodgers",
          "New York Yankees", "Washington Senators", 
          "St. Louis Cardinals","Detroit Tigers", "Milwaukee Braves",
          "Los Angeles Dodgers", "New York Mets", "Baltimore Orioles",
          "Oakland Athletics", "Philadelphia Phillies", "Kansas City Royals", "Minnesota Twins", "Toronto Blue Jays", 
          "Atlanta Braves", "Florida Marlins", "Arizona Diamondbacks", "Anaheim Angels", "San Francisco Giants"
        };

    string[] worldseriesWinners = new string[104];

    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        listBox1.Items.AddRange(inputTeams);
    }



    private void button2_Click(object sender, EventArgs e)
    {
        StreamReader champFile = File.OpenText("WorldSeriesWinners.txt");
        List<string> inputTeams = new List<string>();
        string selectedTeam;

        while (!champFile.EndOfStream)
        {
            inputTeams.Add(champFile.ReadLine());
        }
        while (listBox1.SelectedIndex != 0)
        {
            selectedTeam = listBox1.SelectedItem.ToString();
        }
        selectedTeam = listBox1.SelectedItem.ToString();
        var count = File.ReadLines("WorldSeriesWinners.txt").Count(x => x.Contains(selectedTeam));

        if (count > 0)
        {
            MessageBox.Show("The " + selectedTeam + "has won the World Series " + count + " times! ");
        }
        else
        {
            MessageBox.Show("The " + selectedTeam + "has never won the World Series.");
        }
    }
}

您需要在完成后关闭流

private void button2_Click(object sender, EventArgs e)
{
    StreamReader champFile = File.OpenText("WorldSeriesWinners.txt");

 ...
     champFile.Close();
} 

最佳做法是使用 using 语句

private void button2_Click(object sender, EventArgs e)
{
    using(StreamReader champFile = File.OpenText("WorldSeriesWinners.txt"))
    {

 ...
     }
} 

您可以通过将 File.OpenText 包装在 try 语句中来测试它。并打破了陷阱。

尝试这样做

using(StreamReader champFile = File.OpenText("WorldSeriesWinners.txt")){
...
}

除非您始终选择列表中的第一项作为执行此操作的代码,否则您的代码将永远无法工作

while (listBox1.SelectedIndex != 0)
{
    selectedTeam = listBox1.SelectedItem.ToString();
}

将永远保留 运行,因为如果您在列表框中选择第一个条目以外的任何其他项目,listBox1.SelectedIndex 将永远不会为 0,并且它将永远循环。没有理由使用 while 循环来读取所选项目。