перечисление с несколькими значениями - PullRequest
0 голосов
/ 28 августа 2018

В моей модели у меня есть этот код

public enum StockStatus
{       
    Origin= 1,

    [Display(Name = "In Transit")]
    InTransit = 5,
    [Display(Name = "Port Louis")]
    PortLouis = 6,
    Yard = 7,
    Requested = 8
}

Мне нужно иметь несколько значений для Origin, например,

public enum StockStatus
{       
    Origin= 1,2,3,4,        

    [Display(Name = "In Transit")]
    InTransit = 5,
    [Display(Name = "Port Louis")]
    PortLouis = 6,
    Yard = 7,
    Requested = 8
}

я знаю, что это не хорошо, но мне нужно быть в состоянии сделать это таким образом

Ответы [ 5 ]

0 голосов
/ 28 августа 2018

Атрибут [Flags] в перечислении позволяет вам назначать несколько значений вашему перечислению одновременно. Вы можете сделать это с помощью побитовых манипуляций

[Flags]
public enum StockStatus
{
    Origin = 0x0 | 0x1 | 0x2,

    [Display(Name = "In Transit")]
    InTransit = 0x4,
    [Display(Name = "Port Louis")]
    PortLouis = 0x8,
    Yard = 0x10,
    Requested = 0x20
}
0 голосов
/ 28 августа 2018

невозможно, потому что следующее будет неоднозначностью.

StockStatus aStatus = StockStatus.Origin;

если я, я определю Origin и OriginMax.

Origin= 1,
OriginMax= 4,

Использование:

1. StockStatus aStatus = StockStatus.Origin;
2. if (aStatus >= StockStatus.Origin && aStatus <= StockStatus.OriginMax)
0 голосов
/ 28 августа 2018

Вы должны сделать что-то вроде этого:

class Status
{
    static void Main(string[] args)
    {
        int code = 1;
        string name;
        Dictionary<int, string> StatusMap = new Dictionary<int, string>
        {
            { 1, "ORIGIN" },
            { 2, "ORIGIN" },
            { 3, "ORIGIN" },
            { 4, "IN TRANSIT" }
        };

   if (!StatusMap.TryGetValue(code, out name))
   {
       Console.WriteLine(name);
       // Error handling here
   }
  }
}

// or a method like this
public static string GetStatus(int code)
{
    string name;
    if (!StatusMap.TryGetValue(code, out name)
    {
        // Error handling here
    }
    return name;
}
0 голосов
/ 28 августа 2018

Вы не можете разделять запятыми значениями с перечислениями.

Вы можете сделать что-то вроде этого:

public class StockStatus
{       
    public List<int> Origin= new List<int>(){1,2,3,4};

    [Display(Name = "In Transit")]
    public List<int> InTransit = new List<int>(){ 5};
    [Display(Name = "Port Louis")]
    public List<int> PortLouis = new List<int>(){ 6};
    public List<int> Yard = new List<int>(){ 7};
    public List<int> Requested = new List<int>(){ 8};
}

таким образом вы сможете иметь несколько значений для Origin

0 голосов
/ 28 августа 2018

Вы должны иметь перечисление как Flags, и значение должно быть поразрядно уникальным (степень 2).

[Flags]
public enum MyEnum
{

    Origin= no1 | no2 | no3 | no4,

    no1 = 1,
    no2 = 1 << 1,
    no3 = 1 << 2,
    no4 = 1 << 3,

    [Display(Name = "In Transit")]
    InTransit = 1 << 4,
    [Display(Name = "Port Louis")]
    PortLouis = 1 << 5,
    Yard = 1 << 6,
    Requested = 1 << 7
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...