【发布时间】:2022-03-06 03:28:22
【问题描述】:
如何强制类的变量可以设置在特定的数值范围内?例如,在下面的示例代码中,我想强制用户只能为变量 DownsamplingScale 设置 0.0f 到 1.0f 之间的值。
public sealed class DownsampleData
{
public float DownsamplingScale = 0.0f;
}
我不是在寻找Clamping type solution,因为我真的需要告诉班级用户他/她必须设置一个 0.0f 到 1.0f 范围内的值strong> 在他们使用我的课程时(编写代码,即在编译之前)。
有几种方法可以在运行时处理这种情况。我需要在编译期间/之前告知预期范围的信息。
【问题讨论】:
-
如果设置字段/属性的代码接收到一个
double值作为它的自己的 方法参数,你希望它在编译时如何工作?从根本上说,不,没有办法做到这一点。 -
只要您能够对常量执行此操作没问题,您就可以编写自己的自定义 Roslyn 分析器。但是,对于像
downsampleData.DownsamplingScale = 1f; downsampleData.DownsamplingScale *= 2这样的非平凡场景,这当然会很快失败。这种事情在编译时无法检测到,必须通过属性来处理。 -
是否可以选择使用整数类型参数,将其缩放到您想要的范围?
-
出于我的兴趣,为什么在编译时,我的意思是属性设置器检查解决方案会在他们尝试运行它时停止他们的应用程序
-
@Progman:只要值在
0.0f到1.0f的范围内,任何数据类型都可以工作(包括自定义结构/类)。
标签: c#