我是否可以使用从...到范围声明int
变量,以便例如int count
只能拥有从0
到19
的值?
当应该有一个超出范围的其他值时,没有任何事情发生,没有异常,没有新值或其他东西只是忽略它。
我经常在一个类中需要这个变量,例如当我需要列表中的值,前进和后退按钮以及某些方法时。我不想制作if
- 条款或每次调用方法。
以下是显示我如何处理问题的代码,但我认为这不是一个很好的方法:
private void btnZurueckData_Click(object sender, RoutedEventArgs e)
{
dataFromGuiToObject(index);
index--;
if (index > -1)
{
resetGUI();
setDataToGui(zeichnungen, index);
btnVorData.IsEnabled = true;
}
else
{
btnZurueckData.IsEnabled = false;
index++;
}
}
private void btnVorData_Click(object sender, RoutedEventArgs e)
{
dataFromGuiToObject(index);
index++;
if (index < zeichnungen.Count)
{
resetGUI();
setDataToGui(zeichnungen, index);
btnZurueckData.IsEnabled = true;
}
else
{
btnVorData.IsEnabled = false;
btnSpeichern.IsEnabled = true;
index--;
}
}
答案 0 :(得分:3)
正如Alex K已经建议你可以写一个属性并使用这样的setter:
private int count;
public int Count
{
get { return count; }
set
{
count = (value >= 0 && value <= 19) ? value : count;
}
}
这将检查变量的新值是否在您设置的范围内,如果不是,它将保持旧值。正常int
;
如果您使用的是Visual Studio类型: propfull 并按两次 TAB 。它会为您自动生成一个刻板的属性。
修改强>
回答你的评论。您还可以在property-setter中调用方法。您可以使用两种方法来调节哪些按钮必须打开或关闭:
public partial class Form1 : Form
{
// this is just to make the code work
List<int> zeichnungen = Enumerable.Range(0, 19).ToList();
private int count;
public int Count
{
get { return count; }
set
{
// if you are inside the bounds
if (value >= 0 && value <= 19)
{
count = value;
// enable the forward and backward button
switchButtons();
}
else
{ // you are out of bounds, so check at which side
// and enable accordingly
manageButtons(value);
}
}
}
public Form1()
{
InitializeComponent();
}
在Click
事件中,您可以增加或减少变量,并将逻辑保留给setter和2个自定义方法
private void btnVorData_Click(object sender, EventArgs e)
{
Count++;
}
private void btnZurueckData_Click(object sender, EventArgs e)
{
Count--;
}
// this method evaluates at which side you are
private void manageButtons(int value)
{
if (value > zeichnungen.Count)
{
btnVorData.Enabled = false;
btnSpeichern.Enabled = true;
}
else
{
btnZurueckData.Enabled = false;
}
}
// this just enables the forward and backward button and disables the save button
private void switchButtons()
{
btnVorData.Enabled = true;
btnZurueckData.Enabled = true;
btnSpeichern.Enabled = false;
}
}
答案 1 :(得分:1)
您可以在set
属性中执行此验证。
private int count;
public int Count
{
set
{
if (value < 0 || value > 19) throw new ArgumentOutOfRangeException(" Value should be between 0 to 19");
this.count = value;
}
get { return this.count; }
}
如果值不在要求的范围内,您可以抛出异常或以您的方式处理它。
您也可以将以下条件用于同一目的。
if((value) * (19 - value) < 0)
{
}
答案 2 :(得分:0)
我会使用一个函数 像
public bool Enable(int value, int max = 19, int min = 0)
{
if()
return (value >= min && value <= max);
}
private void btnZurueckData_Click(object sender, RoutedEventArgs e)
{
dataFromGuiToObject(index);
index--;
if (Enable(index, zeichnungen.Count))
{
resetGUI();
setDataToGui(zeichnungen, index);
btnVorData.IsEnabled = true;
}
else
{
btnZurueckData.IsEnabled = false;
index++;
}
}
private void btnVorData_Click(object sender, RoutedEventArgs e)
{
dataFromGuiToObject(index);
index++;
if (Enable(index, zeichnungen.Count))
{
resetGUI();
setDataToGui(zeichnungen, index);
btnZurueckData.IsEnabled = true;
}
else
{
btnVorData.IsEnabled = false;
btnSpeichern.IsEnabled = true;
index--;
}
}
这个功能会 1.打个电话更清楚 2.不会隐藏属性内的特定逻辑
答案 3 :(得分:-1)
我的2c ......
public int Index
{
get { return index; }
set { index = Math.Min(19, Math.Max(0, value)); }
}