get和Set不起作用
本文关键字:不起作用 Set get | 更新日期: 2023-09-27 17:51:24
我正在编写以下get和set,用于验证来自文本框的输入。基本上,它应该检查用户是否输入了所有值。当我将TextBoxes留空时,它什么也不做,并在使用该变量的输出中显示一个"0"。然而,它确实显示了系统生成的异常并停止了执行,但我想知道为什么它不通过属性验证输入?
这是我的代码:
public double RecoDoseSize
{
get
{
return recoDoseSize;
}
set
{
if (!(value>0))
{
MessageBox.Show("Please Enter the recommended dose size for this product");
textBox8.Focus();
}
recoDoseSize = value;
}
}
private void Submit2_Click(object sender, RoutedEventArgs e)
{
TotalContentProduct = double.Parse(textBox7.Text);
recoDoseSize = double.Parse(textBox8.Text);
NoOfDosespUnit = TotalContentProduct/recoDoseSize;
}
您设置的是支持字段recoDoseSize
,而不是包含代码的属性RecoDoseSize
。因此,您的代码不会执行。您需要将方法体的第二行更改为
RecoDoseSize = double.Parse(textBox8.Text);
(注意大写R
(。
其他人对所述问题给出了正确答案。也就是说,如果您想使用getter/setter,那么您应该调用大写的RecoDoseSize
。
然而,在setter中显示消息框是非常糟糕的做法,因为这违反了最小惊喜原则。
当有人查看行RecoDoseSize = double.Parse(textBox8.Text);
时,根本不清楚此操作是否会导致出现消息框。
偶尔也会有一些例外,让setter触发UI更改是有意义的(例如控件上的Visible
属性(,但默认情况应该始终是不这样做,除非你确信不这样做会更令人困惑(例如,如果你设置Visible = false
,但它仍然可见,那将是令人惊讶的(。
关于您对应该如何实现它的评论,检查应该在点击处理程序中进行,并且该属性可以是一个自动属性,如下所示:
public double RecoDoseSize { get; set; }
private void Submit2_Click(object sender, RoutedEventArgs e)
{
TotalContentProduct = double.Parse(textBox7.Text);
double enteredSize;
if (!double.TryParse(textBox8.Text, out enteredSize) || enteredSize <= 0)
{
MessageBox.Show("Please Enter the recommended dose size for this product");
textBox8.Focus();
return;
}
RecoDoseSize = enteredSize;
NoOfDosespUnit = TotalContentProduct / recoDoseSize;
}
您需要使用TryParse,因为使用Parse时,如果文本不是有效的double
,则会出现错误。TryParse所做的是返回true
或false
,这取决于它是否成功,如果成功,它会用结果填充out参数。
因此,如果它未能解析结果,或者结果为<= 0
,它将显示消息框。在这种情况下,它还从方法中return
,因此它的其余部分不会执行。或者,该方法的其余部分可以在else
块中,在这种情况下不需要return
。选择哪种方式是风格的问题。
您从未实际使用过getter/setter。您直接使用实际的字段名称:recoDoseSize
。将其更改为RecoDoseSize
。
private void Submit2_Click(object sender, RoutedEventArgs e)
{
TotalContentProduct = double.Parse(textBox7.Text);
RecoDoseSize= double.Parse(textBox8.Text);
NoOfDosespUnit = TotalContentProduct/recoDoseSize;
}
您不应该在set语句中处理焦点。
此外,您需要确保该值不为null,否则您无法将其与任何值(大于等(进行比较。