gpt4 book ai didi

c# - 在 C# 中有什么方法可以限制 int 变量的范围?

转载 作者:太空狗 更新时间:2023-10-29 19:56:47 25 4
gpt4 key购买 nike

我这样声明一个变量:

public static int aBtn;

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

有什么方法可以避免我的代码在以后限制它时出现任何问题,这样如果我尝试将值设置为 6,就会发生类似异常的事情。

请注意,我仍然希望能够执行以下操作:

aBtn = aBtn + 1; 

最佳答案

没有。这是一个很好的例子,说明为什么公开公共(public)字段不是一个好主意——您无法控制它们的使用方式。

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

// 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");
}

如果您不喜欢在那里使用条件运算符 ?:,您可以使用 block 体 setter :

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 Time 的 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;
}

关于c# - 在 C# 中有什么方法可以限制 int 变量的范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56197825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com