首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >布尔人的健身俱乐部

布尔人的健身俱乐部
EN

Stack Overflow用户
提问于 2011-10-30 03:03:33
回答 2查看 60关注 0票数 0

这就是我想要做的。

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

存档(位)删除(位)

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

例如,这在我的模型中是这样的:

代码语言:javascript
复制
class Person {

Int32 Status {get;set;}

}

如果归档= true,则将状态设置为1,

如果已删除的= true将状态设置为2,

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

我想使用If语句来完成这个任务,也许我可以使用某种布尔算法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-30 03:19:21

为什么不用枚举呢?

代码语言:javascript
复制
[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;
        }
    }
}

您可以直接将枚举值转换为整数。

代码语言:javascript
复制
int x = (int)person.Status;

如果你有一个整数,你可以做相反的事情。

代码语言:javascript
复制
person.Status = (PersonState)integerValue;

另外,如果您没有提供删除和存档可以共存的可能性,这实际上是一种与布尔人共存的可能性。N个布尔值编码的可能值的数目是2^n,因此,由于有2个布尔值,所以有4个可能的值,00、01、10和11。

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

票数 5
EN

Stack Overflow用户

发布于 2011-10-30 03:06:54

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

然而,。使用if将带来更多的可读性代码,而且可能也会更快一些。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7943061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档