在定义字段的属性时,有没有办法使用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;
}
}
}
}
答案 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;}
}