好吧,小问题。我知道。基本响应可能是
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);”,但说实话,我似乎已经尝试了一切。我决定最好按照知道手头代码的人的逐步说明进行操作。
[编辑] - 错误的操作员,而不是转换。感谢所有帮助过的人!
答案 0 :(得分:6)
您需要使用 AND 而非或。所以,将其改为
if ((YourTime.nHour <= 12) && (YourTime.nHour > 0))
答案 1 :(得分:3)
你的if语句是无效的,而不是Convert.ToInt32
if ((YourTime.nHour <= 12) || (YourTime.nHour > 0))
永远都是真的。我认为你打算做if ((YourTime.nHour <= 12) && (YourTime.nHour > 0))
答案 2 :(得分:2)
你的意思是不管你输入的是什么整数总是中断?
如果是这样,因为无论你键入什么整数,它都会传递其中一个条件。
即如果我输入10000000,它仍然会大于0
如果我输入-10000000,它仍然会小于12
答案 3 :(得分:1)
你只混合两件不应该混合的东西。 从字符串到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这个link可以告诉你如何在asp.net mvc之外使用数据注释创建自定义验证器