仲間の開発者は、選択した曜日を 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)
{...}
もちろん、これは拡張メソッドにうまくラップできますが、突然、少なくとも文字列ソリューションと同じ数のコード行ができてしまい、ビット単位のコードの方が読みやすいとは言えません。
そうは言っても、私はまだフラグ列挙型とビット単位の操作を使用します。私が考えることができる主な利点は次のとおりです。
- よりよい性能
- 保管に必要なスペースが少ない
では、ビット単位のソリューションを同僚に販売するにはどうすればよいでしょうか。するべきか?文字列に対してこのメソッドを使用することの他の利点は何ですか? サンプル プロジェクトを完了した後、チームがまだ文字列ベースのソリューションを選択していることに気付きました。より良い/より強力な議論が必要です。単純なビット文字列ではなく、Flags 列挙型を使用する必要があるのはなぜですか?