繁体   English   中英

C#与EF枚举,查找表和传递它的值?

[英]C# with EF enum, lookup-table and the Value to pass it?

我正在接手一个C#项目,我遇到了一个我不熟悉的概念。

该项目使用EF从枚举中创建查找表。 UI正在接受多选输入,但接收模型接受枚举类型,而不是列表/数组或其他暗示复数的东西。

枚举似乎有一些递归关系

public enum Options
{
    None = 0,

    [Display(Name = @"On-site Security")]
    OnSiteSecurity = 1 << 0,

    [Display(Name = @"Gated Entry")]
    GatedEntry = OnSiteSecurity << 1,

    [Display(Name = @"Gated Entry - Video")]
    GatedEntryVideo = GatedEntry << 1,

    [Display(Name = @"Closed-Circuit TV")]
    CCTV = GatedEntryVideo << 1, ...

查找表有一个Value列,其值以指数方式增长,0,1,2,4,8,16,32,64,128,256,512

最后,UI具有多选输入,其中值与查找表的编号顺序相同。 有一个卫生功能作用于这样的价值(knockout.js)

self.Value = ko.computed({
    read: function () {
        var value = 0;
        $.each(self.Selected(), function (idxitem, item) {
            value |= item;
        });
        return value;
    },
    write: function (value) {

        $.each(self.Available(), function (idxitem, item) {
            if ((value & item.Value) > 0) {
                item.IsSelected(true);
            }
        });

        self.Normalize(value);
    },
    owner: self
});

我不明白这应该如何接受多个选择。

这听起来像它的实施标志 这允许您具有可以表示多个不同值的单个枚举值

这是一个简短的例子

class Program
{
    static void Main(string[] args)
    {
        FlaggedEnum fruitbowl = FlaggedEnum.Apples | FlaggedEnum.Oranges | FlaggedEnum.Pears;

        Console.WriteLine(fruitbowl);

        Console.ReadLine();
    }
}

[Flags]
enum FlaggedEnum
{
    None = 0,
    Apples = 1,
    Pears = 2,
    Oranges = 4,
    Pineapples = 8
}

当你运行它时,你得到输出“苹果,橘子,梨”。 其整数值为7(4 + 2 + 1)。

2的幂的原因是由于它们的二进制等价,1 = 1,2 = 10 4 = 100,8 = 1000 ......所以这给出了值111。

我希望这至少让你走上正确的道路。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM