NET中的范围整数(或C#)

NET中的范围整数(或C#),c#,.net,range,C#,.net,Range,我是瞎了眼,还是.NET framework不提供任何类型的范围整数类?也就是说,该类型将阻止您在某些给定边界之外设置值,而这些边界不是基本数据类型的完整范围。例如,将其值限制在1到100之间的整数类型。这里显示了我的年龄,但回到93年,我记得在Modula-2(eeek!)中使用过类似的东西,但从那以后我就没有看到过对它的明确的框架/语言支持 是我遗漏了什么,还是说“自己做很简单,框架就不用麻烦了” 干杯。没有一个内置类来支持这一点,但通常情况下,在通常认为不必要的属性设置程序中很容易实施 如

我是瞎了眼,还是.NET framework不提供任何类型的范围整数类?也就是说,该类型将阻止您在某些给定边界之外设置值,而这些边界不是基本数据类型的完整范围。例如,将其值限制在1到100之间的整数类型。这里显示了我的年龄,但回到93年,我记得在Modula-2(eeek!)中使用过类似的东西,但从那以后我就没有看到过对它的明确的框架/语言支持

是我遗漏了什么,还是说“自己做很简单,框架就不用麻烦了”


干杯。

没有一个内置类来支持这一点,但通常情况下,在通常认为不必要的属性设置程序中很容易实施

如果没有属性,这将非常有用。但是,由于您可以:

private int myRangedIntValue;
public int MyRangedIntValue
{
    get { return myRangedIntValue; }
    set 
    { 
        myRangedIntValue = Math.Max(1, Math.Min(100, value));
    }
}

自定义类型的优势会减弱。通过保留标准的int类型,您可以减少编译、数据绑定等所需担心的类型。

您不会遗漏任何内容—除非枚举适合您的情况1—它不存在。你自己滚吧



1) 请注意,枚举实际上并没有强制执行有效的枚举值,因为这将排除对组合标志使用枚举的可能性。

它们不像Eiffel的契约式设计,但您可以自己使用。对于C#3.5和更早的版本,有一个


对于C#4.0,s(但它似乎在BCL扩展中)。

是的,制作自己的非常简单,我不知道有任何范围内的整数类或结构可以让您理解此功能。是的,枚举触发了这个问题。我最近看到一些依赖枚举来防止无效值的代码,但我认为由于您提到的原因,它不可靠。默认值(someEnumType)实际上可能返回无效值(枚举总是返回零),感谢链接;我将查看它们。:)请注意,Spec#只是一个实验。实际上,他们重新实现了C#编译器来实现这一点,而且它与官方编译器不同步,因此如果您想要真正的交易,您必须等待.NET4.0中的代码契约。对于.NET3.5,我建议您看看这里:(注意:仅限学术许可证。真正的交易仍在.NET4.0中。)这是一段有用的代码,但请记住,这段代码有一个隐含的假设,即我们应该强制任何大于100或小于1的值为1-100之间的值。在某些情况下,您可能不想强制该值,而是希望在该值超出范围时引发异常或以另一种方式失败。是的-这只是一个示例,说明了如何使用属性来实现这一点-也就是说,属性更加灵活,因为您作为作者,控制是否钳制您的值、忽略无效值、引发异常等。自定义类型会使这变得困难。。。