C#中有什么方法可以限制INT变量的范围

  • 本文关键字:INT 变量 范围 方法 c#
  • 更新时间 :
  • 英文 :


我声明了这样的变量:

public static int aBtn;

,但唯一有效的值是0,1,2,3,4和5

有什么方法可以避免以后在限制时避免任何问题,以便如果我试图将值设置为6,就会发生例外情况。

请注意,我仍然希望能够做以下事情:

aBtn = aBtn + 1; 

no。这是一个很好的例子,说明为什么公开领域是一个坏主意 - 您无法控制它们的使用方式。

如果将其更改为属性,则可以验证设置器中的值:

// TODO: Use a better name than either foo or aBtn
private static int foo;
public static int Foo
{
    get => foo;
    set => foo = value >= 0 && value < 6
        ? value
        : throw new ArgumentOutOfRangeException("Some useful error message here");
}

如果您不喜欢使用条件吗?:在那里的操作员,可以使用一个块状设置器:

public static int Foo
{
    get => foo;
    set
    {
        if (value < 0 || value > 5)
        {
            throw new ArgumentOutOfRangeException("Some useful error message");
        }
        foo = value;
    }
}

或更高,具有一个效法方法,该方法验证值并在输入中返回范围,或者将异常返回。然后,您可以使用以下内容:

public static int Foo
{
    get => foo;
    set => foo = Preconditions.CheckArgumentRange(nameof(value), value, 0, 5);
}

这是NODA时间的CheckArgumentRange的略微修改版本。(真实版本有一种单独的方法可以进行投掷,我怀疑是出于绩效原因,以允许比较零件被绑架。(

internal static int CheckArgumentRange(
    string paramName, int value, int minInclusive, int maxInclusive)
{
    if (value < minInclusive || value > maxInclusive)
    {
        throw new ArgumentOutOfRangeException(paramName, value,
            $"Value should be in range [{minInclusive}-{maxInclusive}]");
    }
    return value;
}

您不能只使用唯一可能值的枚举吗?这是定义小型套件的好方法。

例如:

 public enum RangedInt
{
    cero,
    one,
    two,
    three,
    four,
    five,
    six = 6
}
public class MyClass
{
    public RangedInt Field { get; set; }
}

当然。使用辅助变量测试您希望的值,然后,如果测试正常,则将值传递给真实变量。

我认为通过代码更好地表达了这个想法。根据您的意愿进行修改:

private static int aBtn;
public static int aBtnTest
{
  get
   {
    return aBtn;
   }
  set
   {
    if ((value<0)||(value>6))) //here you test for the values you want
    //do something
   }
}

当您想使用变量时,您使用aBtnTest而不是aBtn进行所有处理。通过这样做,所有比较都是由编译器自动进行的,您不必为此担心。

最新更新