将字符串转换为Ints

时间:2012-01-30 02:34:27

标签: c# string operators int

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

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);”,但说实话,我似乎已经尝试了一切。我决定最好按照知道手头代码的人的逐步说明进行操作。

[编辑] - 错误的操作员,而不是转换。感谢所有帮助过的人!

4 个答案:

答案 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之外使用数据注释创建自定义验证器