[解決済み] フラグを持つEnumの値を繰り返し処理する方法は?
2022-05-06 18:24:29
質問
フラグ列挙型を保持する変数がある場合、その変数内のシングルビット値に対して何らかの方法で反復処理を行うことは可能ですか?それとも、Enum.GetValues を使用して列挙型列挙型全体を繰り返し、どれが設定されているかをチェックしなければならないのでしょうか?
どのように解決するのですか?
数年後、もう少し経験を積んでから、1ビットの値だけで、最下位ビットから最上位ビットへ移動する場合の私の究極の答えは、Jeff Mercadoの内部ルーチンを少し変形させたものです。
public static IEnumerable<Enum> GetUniqueFlags(this Enum flags)
{
ulong flag = 1;
foreach (var value in Enum.GetValues(flags.GetType()).Cast<Enum>())
{
ulong bits = Convert.ToUInt64(value);
while (flag < bits)
{
flag <<= 1;
}
if (flag == bits && flags.HasFlag(value))
{
yield return value;
}
}
}
何年か前の反対にもかかわらず、私はここでHasFlagを使っています。ビット単位の比較を使うよりもずっと読みやすく、私がこれからすることにとってはスピードの差は重要ではありません。(その後、HasFlagsの速度が改善された可能性もありますが、私が知る限りでは...テストしていません)。
関連
-
[解決済み] 'SubSonic.Schema .DatabaseColumn' 型のオブジェクトをシリアライズする際に、循環参照が検出されました。
-
[解決済み] enumを列挙するには
-
[解決済み] intをenumにキャストするにはどうすればよいですか?
-
[解決済み] 辞書を繰り返し使用するには?
-
[解決済み] Javaで文字列値からenum値を取得する方法
-
[解決済み] C#がforeachで変数を再利用するのは理由があるのか?
-
[解決済み] C#の[Flags]Enum属性の意味とは?
-
[解決済み] Static readonly」対「const」。
-
[解決済み】大文字・小文字を区別しない「Contains(string)
-
[解決済み】enumを繰り返し処理する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】指定されたキャストが有効でない?
-
[解決済み】Excel "外部テーブルが期待された形式ではありません。"
-
[解決済み】「入力文字列が正しい形式ではありませんでした」エラーの解決方法は?[重複しています]。
-
[解決済み】Sequence contains no matching element(シーケンスにマッチする要素がない
-
[解決済み】Entity FrameworkからのSqlException - セッション内で他のスレッドが動作しているため、新しいトランザクションは許可されません。
-
[解決済み] ...基礎となる接続は閉じられました。予期しないエラーが受信で発生しました
-
[解決済み】エラー「必要なフォーマルパラメータに対応する引数が与えられていない」を解決する?
-
[解決済み】パラメータ付きRedirectToAction
-
[解決済み】別のスレッドがこのオブジェクトを所有しているため、呼び出し側のスレッドはこのオブジェクトにアクセスできない
-
[解決済み】フラグの組み合わせのどれかが設定されているかどうかを確認するには?