【问题标题】:C# Days of the week tryparse string conversionsC# 星期几 tryparse 字符串转换
【发布时间】:2019-09-14 03:12:02
【问题描述】:

所以我目前正在尝试完成这个程序,当您输入与星期几相关的数字时,它会反映连接到数字变量的文本。 (即:星期日 - 1、星期一 - 2 等)

我找到了一个使程序运行的有效代码,但它输出的信息不正确。无论我输入什么数字,它总是显示星期天。它并不能阻止我输入错误的变量。我想要它。在这一点上我很沮丧,我对这一切都很陌生。有人可以检查我的代码并告诉我我做错了什么吗?谢谢。

private void OkButton_Click(object sender, EventArgs e)
{
    string day ="1";
    int number;

    if (int.TryParse(day, out number))
    {
        if (number >= 7 && number <= 1)
        {
            switch (day)
            {
                case "1":
                    dayOutputLabel.Text = "Sunday";
                    break;
                case "2":
                    dayOutputLabel.Text = "Monday";
                    break;
                case "3":
                    dayOutputLabel.Text = "Tuesday";
                    break;
                case "4":
                    dayOutputLabel.Text = "Wednesday";
                    break;
                case "5":
                    dayOutputLabel.Text = "Thursday";
                    break;
                case "6":
                    dayOutputLabel.Text = "Friday";
                    break;
                case "7":
                    dayOutputLabel.Text = "Saturday";
                    break;
            }
        }
        else
        {
            MessageBox.Show("Invalid number input. Please use a number between 1 and 7.");
        }
    }
    else
    {
        MessageBox.Show("Please put in a valid number.");
    }
}

private void ExitButton_Click(object sender, EventArgs e)
{
    this.Close();
}

【问题讨论】:

  • 您如何提供输入?这里day ="1" 硬编码和int.TryParse(day, out number) 使number = 1。所以dayOutputLabel.Text 永远是星期日,day ="1"。
  • 是的,我做到了。就像我说的,我对这一切都非常陌生。你的解决方案很棒。我想知道您是否可以向我解释 .trim();作品?我非常感谢您的帮助。我已经坚持了好几个小时了。
  • Trim() 是一种简单地删除字符串周围空白的方法。因此,例如,它将“5”、“5”、“5”、“5”、“5”等转换为“5”这样您的用户可能会在间距方面有点草率,但仍然可以得到转换去工作。如果您认为这回答了您的问题,请考虑将其标记为已接受的答案。如有任何其他问题,请随时提出,祝您好运!
  • .NET 提供了一个System.DayOfWeek 枚举,在这里可能比 switch 语句方法更有用。请注意,枚举的数值范围从周日的 0 到周六的 6。如果用户正在输入 1-7 的值,那么您需要首先像您已经在做的那样解析为整数,然后递减解析的值,最后转换为 DayOfWeek,当您将字符串值传递给标签时,它将输出字符串值。

标签: c# string int switch-statement tryparse


【解决方案1】:

看起来您已硬编码 day = "1"(即星期日)。

这也是一个错误:


 if (number >= 7 && number <= 1)

你的意思是……


 if (number >= 1 && number <= 7)

我无法准确判断您正在从事哪种项目,但以下轻微修改在 wpf 中有效,应该是您解决此问题所需的全部内容:

private void OKButton_Click(object sender, RoutedEventArgs e)
        {                      
            string day = myTextBox.Text.Trim();
            int number = 0;

            if (int.TryParse(day, out number))
            {
                if (number >= 1 && number <= 7)
                {
                    switch (day)
                    {
                        case "1":
                            dayOutputLabel.Content = "Sunday";
                            break;
                        case "2":
                            dayOutputLabel.Content = "Monday";
                            break;
                        case "3":
                            dayOutputLabel.Content = "Tuesday";
                            break;
                        case "4":
                            dayOutputLabel.Content = "Wednesday";
                            break;
                        case "5":
                            dayOutputLabel.Content = "Thursday";
                            break;
                        case "6":
                            dayOutputLabel.Content = "Friday";
                            break;
                        case "7":
                            dayOutputLabel.Content = "Saturday";
                            break;
                    }
                }
                else
                {
                    MessageBox.Show("Invalid number input. Please use a number between 1 and 7.");
                }


【讨论】:

    【解决方案2】:

    正如上面评论中提到的......这是使用System.DayOfWeek枚举的可能解决方案:

    private void OKButton_Click(object sender, RoutedEventArgs e)
    {
        // this TryParse makes use of pattern matching
        if(int.TryParse(myTextBox.Text.Trim(), out var input) && input >= 0 && input <= 6)
        {
            // this should automatically convert to the name of the day of week
            // if not, add .ToString() at the end
            dayOutputLabel.Content = (DayOfWeek)input;
        }
        else
        {
            MessageBox.Show(
                text: "Please use a number between 0 and 6",
                caption: "Invalid Input",
                buttons: MessageBoxButtons.OK,
                icon: MessageBoxIcon.Error);
        }
    }
    

    这是另一个使用Enum.TryParse() 的选项:

    private void OKButton_Click(object sender, RoutedEventArgs e)
    {
        // this TryParse makes use of pattern matching
        if(Enum.TryParse(myTextBox.Text.Trim(), out DayOfWeek input) &&
           input >= DayOfWeek.Sunday && input <= DayOfWeek.Saturday)
        {
            // this should automatically convert to the name of the day of week
            // if not, add .ToString() at the end
            dayOutputLabel.Content = input;
        }
        else
        {
            MessageBox.Show(
                text: "Please use a number between 0 and 6",
                caption: "Invalid Input",
                buttons: MessageBoxButtons.OK,
                icon: MessageBoxIcon.Error);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-16
      • 2018-03-04
      • 1970-01-01
      • 1970-01-01
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 2011-01-29
      相关资源
      最近更新 更多