我有一个与外部库连接的程序,该库除其他外,在较大的结构中打包了一个无符号的12位值。

以前是8位,因此我们只是将其编码为一个字节。

现在是12位...我可以使用ushort,但这带来了(a)范围检查和(b)封送处理的问题。

有没有一种简单的方法来实现这样的约束数字类型,而我不必重写每个赋值和比较方法?

最佳答案

您应该创建一个覆盖隐式转换运算符的结构:

struct PackedValue {
    private PackedValue(ushort val) {
         if(val >= (1<<12)) throw new ArgumentOutOfRangeException("val");
         this._value = val;
    }
    private ushort _value;
    public static explicit operator PackedValue(ushort value) {
        return new PackedValue(value);
    }

    public static implicit operator ushort(PackedValue me) {
        return me._value;
    }
}

关于c# - 定义 “custom”基于整数的类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7615113/

10-10 07:35