0

私はそのように宣言された列挙型を持っています

[Flags]
public enum PermissionEnum
{
    [EnumStringValue("None")]
    None = 0x0,
    [EnumStringValue("Create")]
    Create = 0x1,
    [EnumStringValue("Edit")]
    Edit = 0x2,
    [EnumStringValue("View")]
    View = 0x4
}

その後、利用可能な最高のアクセス許可を取得しようとするいくつかのlinqがあります。

List<SecurityRolePermissionView> AvailablePermissions = GetPermissions();

SecurityRolePermissionView HighestPermission = AvailablePermissions.OrderByDescending(o => o.Permission).FirstOrDefault();

現在の列挙値では、これはそれが行うことを示唆していることを行うようです。ただし、このコードが正しくないことはかなり確信していますが、正しい実装を実現する理由や方法を説明できるかどうかはわかりません。

いずれにせよ、誰かがこれが実際に間違っているかどうか(そしてその理由)を確認し、私の望ましい結果を達成する方法の説明を提供してくれませんか?

編集:私の最高の許可が何であるかを説明するのに十分に明確ではなかったかもしれません。これはフラグの列挙です。したがって、None、Create、Edit、Viewの任意の組み合わせを含めることができます。私が最も高いものとして見つけようとしているのは、基本的に作成+編集+表示です。それが失敗した場合は、編集+表示、最後に表示

4

2 に答える 2

4

列挙型の順序は、列挙型の基になる型の順序と同じです(C#仕様のセクション7.9.5「列挙型演算子」)。したがって、これは可能な列挙値の順序です。

View | Edit | Create ( = 7)
View | Edit          ( = 6)
View | Create        ( = 5)
View                 ( = 4)
Edit | Create        ( = 3)
Edit                 ( = 2)
Create               ( = 1)
None                 ( = 0)

その順序が要件に適合している場合、コードは正しいです。

于 2012-11-29T05:36:47.080 に答える
0

8進数から整数への直接変換関数があるかどうかはわかりません。

列挙値を渡すときにint値を返す関数を1つ作成できます。たとえば、 GetIntValue(PermissionEnum.None) これは0を返します。

したがって、次のように順序付けロジックを記述できます。

SecurityRolePermissionView HighestPermission = AvailablePermissions.OrderByDescending(o => GetIntValue(o.Permission)).FirstOrDefault();
于 2012-11-29T05:21:55.913 に答える