一位开发人员建议我们将一周中的选定日期存储为 1 和 0 的 7 个字符串,即星期一和星期五的“1000100”。我更喜欢(并强烈建议)使用 Flags 枚举和按位运算的解决方案,我认为这是一种更简洁的方法,并且对于其他开发人员来说应该更容易理解。
[Flags()]
public enum Weekdays : int
{
Monday = 1,
Tuesday = 2,
Wednesday = 4,
Thursday = 8,
Friday = 16,
Saturday = 32,
Sunday = 64
}
然而,当我开始实现一个示例解决方案时,我意识到也许简单的字符串方法毕竟更容易:当然,如果您只是查看数据,位串比“17”更明显。而且我发现 C# 位运算违反直觉并且非常冗长:
Weekdays workDays = Weekdays.Monday | Weekdays.Tuesday;
if ((workDays & Weekdays.Monday) == Weekdays.Monday)
{...}
当然,这可以很好地包装到扩展方法中,但是我们突然之间会得到至少与字符串解决方案相同的代码行数,而且我很难说按位代码更容易阅读。
话虽如此,我仍然会使用标志枚举和按位运算。我能想到的主要好处是
- 更好的性能
- 存储所需空间更少
那么如何将按位解决方案卖给我的同事呢?我是不是该?使用此方法而不是字符串还有什么其他好处?完成示例项目后,我发现团队仍然选择了基于字符串的解决方案。我需要一些更好/更强的论据。为什么要使用标志枚举而不是简单的位串?