从布尔值中求出整数
本文关键字:整数 布尔值 | 更新日期: 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
将产生更可读的代码,并且可能也会更快一些。