将字符串转换为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]-错误的运算符,而不是转换。感谢所有提供帮助的人!
您需要使用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 之外使用数据注释,这个链接可以向你展示如何创建自定义验证器