使用from ...到范围声明int变量

时间:2016-11-14 14:07:05

标签: c# wpf variables

我是否可以使用从...到范围声明int变量,以便例如int count只能拥有从019的值?

当应该有一个超出范围的其他值时,没有任何事情发生,没有异常,没有新值或其他东西只是忽略它。

我经常在一个类中需要这个变量,例如当我需要列表中的值,前进和后退按钮以及某些方法时。我不想制作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--;
    }
}

4 个答案:

答案 0 :(得分:3)

正如Alex K已经建议你可以写一个属性并使用这样的setter:

private int count;

public int Count
{
    get { return count; }
    set
    {
        count = (value >= 0 && value <= 19) ? value : count;
    }
}

这将检查变量的新值是否在您设置的范围内,如果不是,它将保持旧值。正常int;

的初始值通常为0

如果您使用的是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)); }
}