嗨,我对编程有点陌生,更多的是一种爱好。我想知道以下逻辑或技术是否具有特定名称或术语。我当前的项目有 7 个复选框,一个对应一周中的每一天。我需要一个简单的方法来保存选中了哪些框。
下面是将选中的复选框保存到单个数字的方法。每个复选框的值都是最后一个复选框的两倍。当我想找出哪些复选框被选中时,我向后工作,看看我可以将总值除以复选框值多少次。
private int SetSelectedDays()
{
int selectedDays = 0;
selectedDays += (dayMon.Checked) ? 1 : 0;
selectedDays += (dayTue.Checked) ? 2 : 0;
selectedDays += (dayWed.Checked) ? 4 : 0;
selectedDays += (dayThu.Checked) ? 8 : 0;
selectedDays += (dayFri.Checked) ? 16 : 0;
selectedDays += (daySat.Checked) ? 32 : 0;
selectedDays += (daySun.Checked) ? 64 : 0;
return selectedDays;
}
private void SelectedDays(int n)
{
if ((n / 64 >= 1) & !(n / 64 >= 2))
{
n -= 64;
daySun.Checked = true;
}
if ((n / 32 >= 1) & !(n / 32 >= 2))
{
n -= 32;
daySat.Checked = true;
}
if ((n / 16 >= 1) & !(n / 16 >= 2))
{
n -= 16;
dayFri.Checked = true;
}
if ((n / 8 >= 1) & !(n / 8 >= 2))
{
n -= 8;
dayThu.Checked = true;
}
if ((n / 4 >= 1) & !(n / 4 >= 2))
{
n -= 4;
dayWed.Checked = true;
}
if ((n / 2 >= 1) & !(n / 2 >= 2))
{
n -= 2;
dayTue.Checked = true;
}
if ((n / 1 >= 1) & !(n / 1 >= 2))
{
n -= 1;
dayMon.Checked = true;
}
if (n > 0)
{
//log event
}
}
该方法可以很好地满足我的需要,但是,如果您确实看到另一种方法或更好的写作方式,我会对您的建议感兴趣。
最佳答案
其他人提到了位掩码,但我想我会向您展示一种简化代码的方法。
daySun.Checked = (n & 64) == 64;
daySat.Checked = (n & 32) == 32;
dayFri.Checked = (n & 16) == 16;
dayThu.Checked = (n & 8) == 8;
dayWed.Checked = (n & 4) == 4;
dayTue.Checked = (n & 2) == 2;
dayMon.Checked = (n & 1) == 1;
关于c# - 这种类型的功能或技术有名称吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2478319/