【问题标题】:Converting Strings to Ints将字符串转换为整数
【发布时间】:2012-02-21 22:37:24
【问题描述】:

好的,小问题。我知道。基本反应可能是

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] - 错误的操作符,不是转换。感谢所有帮助过的人!

【问题讨论】:

  • 你的时间是多少?您创建的课程?
  • 没关系,有人已经回答了我要回复的内容

标签: c# string operators int


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    if ((YourTime.nHour &lt;= 12) || (YourTime.nHour &gt; 0)) 永远为真。我想你的意思是if ((YourTime.nHour &lt;= 12) &amp;&amp; (YourTime.nHour &gt; 0))

    【讨论】:

    • 太棒了。谢谢。 (这样的问题在这里回答 this 快吗?)
    【解决方案3】:

    你的意思是无论你输入什么整数,它总是会中断?

    如果是这样,那是因为无论您输入什么整数,它都将始终通过这些条件之一。

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

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

    【讨论】:

      【解决方案4】:

      你只是混合了两种不应该混合的东西。 从 string 到 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 之外使用数据注释,如何创建自定义验证器

      【讨论】:

      • 也可以查看这个链接stackoverflow.com/questions/3699038/…
      • 小调整...分钟从 0 到 59...60 实际上是下一小时的第 0 分钟 :)
      • 这就像你在说日语,伙计!我不知道这意味着什么,我很想问它是否甚至是 C#。 :P
      猜你喜欢
      • 1970-01-01
      • 2010-12-31
      相关资源
      最近更新 更多