这是我想要做的。
我的数据库中有两位字段:
已归档(位) 删除(位)
我想做的是根据他们的vaules计算一个int。
作为一个例子,这将在我的模型中:
class Person {
Int32 Status {get;set;}
}
如果已存档 = true,请将状态设置为1,
如果已删除 = true,请将状态设置为2,
如果两者都为false,请将状态设置为0。
我想在使用If语句时这样做,也许我可以使用某种布尔算法?
答案 0 :(得分:5)
为什么不使用枚举?
[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;
此外,如果您没有提供Deleted和Archived可以共存的可能性,这实际上是布尔可能性的可能性。 由n个布尔值编码的可能值的数量是2 ^ n,因此,由于您有2个布尔值,因此您有4个可能的值,00,01,10和11。
问题在于问题本身:用布尔值编码信息是错误的。它应该是一个枚举,在DB中也只有3个可能的值。
答案 1 :(得分:2)
你可以写Convert.ToInt32(Archived) + 2 * Convert.ToInt32(Deleted)
。
然而,不。使用if
将导致代码更易读,并且可能会更快一些。