这就是我想要做的。
我的数据库中有两个位字段:
存档(位)删除(位)
我想做的是根据它们的值计算一个int。
例如,这在我的模型中是这样的:
class Person {
Int32 Status {get;set;}
}如果归档= true,则将状态设置为1,
如果已删除的= true将状态设置为2,
如果和都为false,则将状态设置为0。
我想使用If语句来完成这个任务,也许我可以使用某种布尔算法?
发布于 2011-10-30 03:19:21
为什么不用枚举呢?
[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;如果你有一个整数,你可以做相反的事情。
person.Status = (PersonState)integerValue;另外,如果您没有提供删除和存档可以共存的可能性,这实际上是一种与布尔人共存的可能性。N个布尔值编码的可能值的数目是2^n,因此,由于有2个布尔值,所以有4个可能的值,00、01、10和11。
问题在于问题本身:用布尔人对信息进行编码是错误的。它应该是一个枚举,在DB中也只有3个可能的值。
发布于 2011-10-30 03:06:54
你可以写Convert.ToInt32(Archived) + 2 * Convert.ToInt32(Deleted)。
然而,不。使用if将带来更多的可读性代码,而且可能也会更快一些。
https://stackoverflow.com/questions/7943061
复制相似问题