【问题标题】:How to validate user input for whether it's an integer?如何验证用户输入是否为整数?
【发布时间】:2011-07-20 17:15:21
【问题描述】:

它告诉我它不能将 int 转换为 bool。 尝试了 TryParse,但由于某种原因,参数列表无效。

代码:

private void SetNumber(string n)
{
    // if user input is a number then
    if (int.Parse(n)) 
    {
        // if user input is negative
        if (h < 0)
        {
            // assign absolute version of user input
            number = Math.Abs(n); 
        }
        else 
        {
            // else assign user input
            number = n;
        }
    }
    else
    {
        number = 0; // if user input is not an int then set number to 0  
    }
}

【问题讨论】:

  • number 是布尔值还是什么?您在哪里收到有关无法将 int 转换为 bool 的错误?
  • 为什么在 C# 代码中使用 vb 样式的 cmets?你是一个进入 C# 的 VB 编码器吗?还是新手将不同语言的样本放在一起?

标签: c# validation input console


【解决方案1】:

你可以尝试一些简单的正则表达式:

  bool IsNumber(string text)
    {
      Regex regex = new Regex(@"^[-+]?[0-9]*\.?[0-9]+$");
      return regex.IsMatch(text);
    }

【讨论】:

    【解决方案2】:
    //vinojash@gmail.com
    //In my knowledge i did this in simple way thanks for watch my code 
     static void Main(string[] args)
        {
            string a, b;
            int f1, f2, x, y;
            Console.WriteLine("Enter two inputs");
            a = Convert.ToString(Console.ReadLine());
            b = Console.ReadLine();
            f1 = find(a);   
            f2 = find(b);   
    
            if (f1 == 0 && f2 == 0)
            {
                x = Convert.ToInt32(a);
                y = Convert.ToInt32(b);
                Console.WriteLine("Two inputs r number \n so tha additon of these text box is= " + (x + y).ToString());
            }
            else
                Console.WriteLine("One or tho inputs r string \n so tha concadination of these text box is = " + (a + b));
            Console.ReadKey();
    
        }
            static int find(string s)
            {
            string s1 = "";
            int f;
             for (int i = 0; i < s.Length; i++)
                for (int j = 0; j <= 9; j++)
                {
                    string c = j.ToString();
                    if (c[0] == s[i])
                    {
                        s1 += c[0];
                    }
                }
    
            if (s==s1)
                f= 0;
            else
                f= 1;
    
            return f;
        }
    

    【讨论】:

    • 请花一点时间解释一下您所做的更改/改进,以便作者或其他人有机会从中学习。无关:欢迎来到stackoverflow :)
    【解决方案3】:

    一方面,内部 if 语句有一个 'h' 而不是 'n' if(h

     private void SetNumber(string n)
        {
            int temp;
            bool success = Int32.TryParse(n, out temp);
    
            // If conversion successful
            if (success)
            {
                // If user input is negative
                if (temp < 0)
                    number = Math.Abs(temp); // Assign absolute version of user input
                else // Assign user input
                    number = temp;
    
            }
            else
            {
                number = 0;
            }
    
        }
    

    【讨论】:

      【解决方案4】:

      这段代码有很多问题:

      • 使用 VB 样式的行 cmets (') 代替 C# 斜杠
      • 解析整数返回 int 而不是 bool
      • 您应该使用带有 out 值的 TryParse
      • h 似乎根本无效。它是 n 的类型吗?
      • 有些变量似乎没有在函数范围(编号)中定义,它们是在类范围中定义的吗?

      但是试试这个:

      private void SetNumber(string n)
      {
          int myInt;
          if (int.TryParse(n, out myInt)) //if user input is a number then
          {
              if (myInt < 0) //if user input is negative
                  number = Math.Abs(n); //assign absolute version of user input
              else //else assign user input
                  number = n;
          }
          else number = 0; //if user input is not an int then set number to 0
      }
      

      【讨论】:

        【解决方案5】:

        int.Parse 将字符串转换为整数。当前您在 if 语句中拥有它,因此它将 int.Parse 的返回值视为布尔值,而不是。

        这样的事情会起作用:

        private void SetNumber(string n)
        {
            int num = 0;
            try{
                num = int.Parse(n);
                number = Math.Abs(num);
            }catch(Exception e){
                number = 0;
            }   
        }
        

        【讨论】:

        • 忘记了 TryParse,最近没有使用过 C#,请参阅 @Paul Sasik 以获得正确的示例。
        【解决方案6】:

        就用这个吧:

        int i;
        bool success = int.TryParse(n, out i);
        

        如果解析成功,success 就是true

        如果那个案例i包含数字。

        您之前可能弄错了out 参数修饰符。它具有out 修饰符,表明它是一个在调用的方法中被初始化的值。

        【讨论】:

          【解决方案7】:

          int.Parse 将返回一个整数而不是布尔值。

          您可以按照您的建议使用 int.TryParse。

          int parsedValue;
          if(int.TryParse(n, out parsedValue))
          {
          }
          

          【讨论】:

            【解决方案8】:

            您可以使用int.TryParse.. 尝试以下类似操作。

                    private void SetNumber(string n)
                    {
                        int parsed = -1;
                        if (int.TryParse(n, out parsed)) //if user input is a number then
                        ...
            

            之所以抱怨它无法将int 转换为bool 是因为int.Parse() 的返回类型是int 而不是bool,并且在c# 中条件需要评估@987654328 @值。

            【讨论】:

              【解决方案9】:
                  private void SetNumber(string n)
                  {
                      int nVal = 0;
              
                      if (int.TryParse(n, out nVal))
                      {
                          if (nVal < 0)
                              number = Math.Abs(nVal);
                          else
                              number = nVal;
                      }
                      else
                          number = 0;
                  }
              

              【讨论】:

                【解决方案10】:

                您可能非常接近使用TryParse,但我猜您忘记了参数上的out 关键字:

                int value;
                if (int.TryParse(n, out value))
                {
                
                }
                

                【讨论】:

                • 确实; int.Parse() 返回一个 int,这就是为什么你不能在不以某种方式评估返回值的情况下检查它的真假。
                猜你喜欢
                • 2017-11-25
                • 2020-07-22
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多