如何确保文本框中的值是整数类型?

时间:2014-12-01 18:04:52

标签: c#

在定义字段的属性时,有没有办法使用int.TryParse? 我想要完成的是检查用户是否没有意外插入字符串而不是整数。我无法弄清楚这一点。任何想法和提示都会非常有用。

版: 我想要做的是 - 用户将值放在文本框中,并在按下按钮后,getset属性评估用户放入文本框的值是否为整数。任何其他数据类型都无效,因此万一,如果用户已放入字符串或字符,则会显示消息框,并显示消息“请插入数字”希望我更容易理解我真正想要实现的目标 以下是示例代码:

private void button1_Click(object sender, EventArgs e)
{
    List<myClass> myList = new List<myClass>();
    myList.Add(new myClass { Skaitlis1 = textBox1.Text });
    foreach (myClass pers in myList)
    {
        listBox1.Items.Add(pers.Skaitlis1);
    }
}

class myClass
{
    private int skaitlis1;
    public int Skaitlis1
    {
        get { return skaitlis1; }
        set
        {
            int a;
            if (int.TryParse(value, out a))
            {
                skaitlis1 = a;
            }
            else
            {
                skaitlis1 = 0;
            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

我不确定这是否真的是你所追求的,但听起来你想要一个字符串属性,只有在用户传递一个可以转换为int的字符串时才能设置?

如果是这样,那么如果只是将支持字段的类型更改为int,那么您将拥有(几乎)工作:

private class myClass
{
    private int skaitlis1;

    public string Skaitlis1
    {
        get { return skaitlis1.ToString(); }
        set { int.TryParse(value, out skaitlis1); }
    }
}

var x = new myClass();
x.Skaitlis1 = "hello";
Console.WriteLine("The value of Skaitlis1 is: {0}", x.Skaitlis1);

x.Skaitlis1 = "12";
Console.WriteLine("Now the value of Skaitlis1 is: {0}", x.Skaitlis1);

// Output:
// The value of Skaitlis1 is: 0
// Now the value of Skaitlis1 is: 12

否则,如果您只想要int属性,请将其设为int而不是string

public int Skaitlis1 { get; set; }

最好在类中使用int属性,现在将验证逻辑移到UI端:

private void button1_Click(object sender, EventArgs e)
{
    int value;
    if (int.TryParse(textBox1.Text, out value))
    {
        // This is from your code above. The logic does not make sense in that
        // it is doing a lot of extra work to just add 'value' to the listBox1.
        // I assume in reality you're actually adding 'myClass' to a global list?

        List<myClass> myList = new List<myClass>();
        myList.Add(new myClass { Skaitlis1 = value });

        foreach (myClass pers in myList)
        {
            listBox1.Items.Add(pers.Skaitlis1);
        }
    }
    else
    {
        MessageBox.Show("You must enter a valid integer!");
    }
}

答案 1 :(得分:0)

如果你真的想要存储一个字符串属性,但想要确保该属性可以作为int传递,那么你就是在正确的轨道上。只是不要使用TryParse评估结果(除非要将其转换回string)。

class myClass
{
    private string skaitlis1;
    public string Skaitlis1
    {
        get { return skaitlis1; }
        set
        {
            int a;
            if (int.TryParse(value, out a))
            {
                skaitlis1 = value;
            }
            else
            {
                skaitlis1 = "0";
            }
        }
    }
}

如果您想将属性更改为int并在创建之前确保该值,那么您可以执行以下操作。

private void button1_Click(object sender, EventArgs e)
{
    int val;
    if (int.TryParse(textBox1.Text, out val))
    {
      List<myClass> myList = new List<myClass>();
      myList.Add(new myClass { Skaitlis1 = val });

      foreach (myClass pers in myList)
      {
          listBox1.Items.Add(pers.Skaitlis1);
      }
    }
    else
    {
      MessageBox.Show("Invalid value.  Must be numeric.");
    }
}

class myClass
{
    public int Skaitlis1 {get; set;}
}