从布尔值中求出整数

本文关键字:整数 布尔值 | 更新日期: 2023-09-27 18:12:41

我想这样做。

我有两个位字段在我的数据库:

存档(位)删除(位)

我想做的是根据它们的值计算一个int。

作为一个例子,这将是在我的模型:

class Person {
Int32 Status {get;set;}
}

如果存档 = true设置状态为1,

如果Deleted = true设置状态为2,

如果均为false,则设置状态为0。

我想在不使用If语句的情况下做到这一点,也许有一些布尔算术,我可以使用?

从布尔值中求出整数

为什么不用enum呢?

[Flags]
public enum PersonState
{
    None = 0,
    Archived = 1,
    Deleted = 2,
    Both = Archived | Deleted
}
class Person
{
    private PersonState status;
    public PersonState Status
    {
        get { return this.status; }
        set { this.status = value; }
    }
    public bool IsArchived
    {
        get
        {
            return (this.status & PersonState.Archived) != 0;
        }
        set
        {
            if (value)
                this.status |= PersonState.Archived;
            else
                this.status &= ~PersonState.Archived;
        }
    }
    public bool IsDeleted
    {
        get
        {
            return (this.status & PersonState.Deleted) != 0;
        }
        set
        {
            if (value)
                this.status |= PersonState.Deleted;
            else
                this.status &= ~PersonState.Deleted;
        }
    }
}

可以直接将枚举值强制转换为整型。

int x = (int)person.Status;

如果有int类型,也可以相反。

person.Status = (PersonState)integerValue;

如果你不提供删除和存档可以共存的可能性,这实际上是布尔值的一种可能性。由n个布尔值编码的可能值的数量是2^n,所以,因为你有2个布尔值,你有4个可能的值,00,01,10和11。

问题在于问题本身:用布尔值对信息进行编码是错误的。它应该是一个枚举,只有3个可能的值也在DB中。

可以写Convert.ToInt32(Archived) + 2 * Convert.ToInt32(Deleted)

然而,

不要。使用if将产生更可读的代码,并且可能也会更快一些。