将字符串转换为Ints

本文关键字:Ints 转换 字符串 | 更新日期: 2023-09-27 18:21:45

好吧,关键问题。我知道。基本响应可能是

Convert.ToInt32(string);

但很自然,C#会做每一个自然的过程来确保这种情况不会发生。

这是我的代码:

            while (true)
            {
                while (true)
                {
                    //ask for time
                    Console.WriteLine("What is the hour?");
                    Console.WriteLine();
                    string s = Console.ReadLine();
                    //convert input to int
                    YourTime.nHour = Convert.ToInt32(s);
                    //check to see if it's legal
                    if ((YourTime.nHour <= 12) || (YourTime.nHour > 0))
                    {
                        break;
                    }
                //etc etc code
                }
            }  

我想确保输入是一个实际的小时。当我运行这段代码时,它总是将if()语句标记为"true"并中断,即使我输入了-13或99之类的内容。

我确信有一个简单的替代"Convert.ToInt32(s);"的方法,但老实说,我似乎已经尝试了所有方法。我决定最好按照熟悉手头代码的人的循序渐进的指示进行操作。

[EDIT]-错误的运算符,而不是转换。感谢所有提供帮助的人!

将字符串转换为Ints

您需要使用AND而不是OR。所以,把它改成

if ((YourTime.nHour <= 12) && (YourTime.nHour > 0)) 

无效的是if语句,而不是Convert.ToInt32

if ((YourTime.nHour <= 12) || (YourTime.nHour > 0))将始终为真。我想你是想做if ((YourTime.nHour <= 12) && (YourTime.nHour > 0))

你的意思是,无论你在其中键入什么整数,它都会中断吗?

如果是这样,那是因为无论您键入什么整数,它都会通过其中一个条件。

即,如果我输入10000000,它仍将大于0

如果我输入-1000000,它仍然会小于12

您只是混合了两种不应该混合的东西。从字符串到int的转换器不应该包含任何业务逻辑,这是模型的责任,要知道这个字段实际上是小时,而不是到期的付款金额

因此,为了将其分离,您可以使用许多东西,例如数据注释,请查看以下代码

 public class MyTime
 {
 [Require]
 [Range(0, 12, ErrorMessage = "Value for {0} must be between {1} and {2}.")]
 public int Hours { get; set; }
 [Require]
 [Range(0, 59, ErrorMessage = "Value for {0} must be between {1} and {2}.")]
 public int Minutes { get; set; }
 }

通过这种方式,您定义了模型,可以根据它所知道的规则进行验证,并且您可以得到有意义的错误消息

PS如果你在asp.net mvc 之外使用数据注释,这个链接可以向你展示如何创建自定义验证器