C# 用于将属性设置为固定值集之一的API

C# 用于将属性设置为固定值集之一的API,c#,api-design,C#,Api Design,我正在为电子设备设计软件API,其中一个功能是设置某些属性的值 对于任何给定的属性,只有一组可接受的值,用户需要从GUI中的组合框中选择这些值 该类当前的设计如下: public class Device { public double[] ValidPropertyValues => new double[] { 1000, 2000, 4000 }; public double Property { get; set; } } 我主要担心的是,除了客户端代码(如组合

我正在为电子设备设计软件API,其中一个功能是设置某些属性的值

对于任何给定的属性,只有一组可接受的值,用户需要从GUI中的组合框中选择这些值

该类当前的设计如下:

public class Device
{
    public double[] ValidPropertyValues => new double[] { 1000, 2000, 4000 };

    public double Property { get; set; }
}
我主要担心的是,除了客户端代码(如组合框示例),没有任何东西阻止将
属性设置为
有效属性值
之外的值

是否有一种方法可以强制仅使用design(即类本身中的代码)的情况下,只有有效值才是“可设置的”?

尝试以下版本:

public class Device
{
    private double data;
    public double[] ValidPropertyValues => new double[] { 1000, 2000, 4000 };
    public double Property
    {
        get { return data; }
        set {
            foreach (double val in ValidPropertyValues)
            if (value == val)
            {
                data = value;
                break;
            }
            //if not found, throw some exception
        }
    }
}

基本上,给setter添加一些逻辑,而不是让它自动运行。

难道不能只使用setter吗?可以有多少有效属性?如果它是一个很小的集合,你总是可以有一个枚举。从技术上讲,属性是类的一部分,所以属性的setter中的代码就是类本身的代码。你为什么不那样做呢?实际上我已经有一个二传手了,只是一个自动的。你是在建议在设定者中加入一些逻辑吗?比如在使用无效值的情况下抛出异常?或者可能有一些
bool TrySetProperty(double newValue)
,如果使用了无效值,它将返回
false
?如果您将
属性更改为只接受索引值为
ValidPropertyValues
,那么API用户只能选择有效值,该怎么办。当设置
属性时,他们需要知道/关心什么应该驱动他们这样做。