这是我想要做的.
我的数据库中有两个位字段:
存档(位)已删除(位)
我想做的是根据他们的vaules计算一个int.
作为一个例子,这将在我的模型中:
class Person {
Int32 Status {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
如果Archived = true,则将状态设置为1,
如果Deleted = true,则将状态设置为2,
如果两者都为假,则将状态设置为0.
我想用if语句做这个,也许我可以使用某种布尔算法?
为什么不使用枚举?
[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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以直接将枚举值转换为整数.
int x = (int)person.Status;
Run Code Online (Sandbox Code Playgroud)
如果你有一个int,你可以做相反的事情.
person.Status = (PersonState)integerValue;
Run Code Online (Sandbox Code Playgroud)
此外,如果您没有提供Deleted和Archived可以共存的可能性,这实际上是布尔值的可能性.由n个布尔值编码的可能值的数量是2 ^ n,因此,由于您有2个布尔值,因此您有4个可能的值,00,01,10和11.
问题在于问题本身:用布尔值编码信息是错误的.它应该是一个枚举,在DB中也只有3个可能的值.