こんにちは、私はプログラミングに少し慣れていませんが、どちらかというと趣味です。次のロジックまたはテクニックに特定の名前または用語があるかどうか疑問に思っています。現在のプロジェクトには、曜日ごとに 1 つずつ、合計 7 つのチェック ボックスがあります。どのボックスがチェックされたかを簡単に保存する必要がありました。
以下は、チェックボックスを単一の番号に保存する方法です。各チェックボックスは、最後のチェック ボックスの 2 倍の値を取得します。どのボックスがチェックされているかを知りたいときは、逆算して合計値をチェックボックスの値で割り切れる回数を調べます。
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
}
}
この方法は私が必要としているものにはうまく機能しますが、これを行う別の方法やより良い書き方があれば、あなたの提案に興味があります.