2013-04-15 6 views
-5

мне нужно найти в enum DaysOfTheWeek значений отфильтрованы по List<int> daysId и возврату отфильтрованного перечисленияПолучить значения из перечисления

Моего перечисление:

[Flags] 
public enum DaysOfTheWeek 
{ 
    Sunday = 1, 
    Monday = 2, 
    Tuesday = 4, 
    Wednesday = 8, 
    Thursday = 16, 
    Friday = 32, 
    Saturday = 64, 
    AllDays = 127, 
} 

-

var allValues = Enum.GetValues(typeof(DaysOfTheWeek)); 

Моего целочисленный список:

List<int> daysId = new List<int> {1,3}; 
+9

Итак, в чем вопрос? –

+0

Когда мы делаем '[Flags] enum', мы обычно используем' 0x001', '0x002',' 0x004', '0x008',' 0x010' и т. Д. С ними проще работать (особенно когда у вас много опций. Кроме того, 'AllDays = Sunday | Monday | [...]' будет лучше, потому что вам не нужно будет адаптировать его значение, если вы хотите добавить или удалить дни (или изменить значение существующих). – Nolonar

+0

Что это фильтр, и каков ожидаемый результат: включен ли он или исключает фильтр? Это недостаточно ясно. –

ответ

1
var filtered = daysId.Select(d => (DaysOfTheWeek)d); 
+0

Хотя я совершенно не уверен, я подозреваю, что OP хочет, чтобы значения перечисления возвращались в виде битмаски, а не как перечислимые. Но, как я уже сказал, полностью неуверенный. –

+0

var filt = daysId.Select (d => (DaysOfTheWeek) d); не работает в настоящее время – user2264703

+0

@ user2264703 'не работает', какую ошибку вы получаете? – I4V

0

Не уверен насчет вашего вопроса. Что-то вроде этого?

var filtered = daysId.Select(d=>(DaysOfTheWeek)(1<<(d-1))).ToList(); 
0

Может быть, я более усложняя, но проверить это:

int[] daysId = new int[] { 1, 3,48,127 }; 

Dictionary<int, List<DaysOfTheWeek>> result = new Dictionary<int, List<DaysOfTheWeek>>(); 

foreach (int id in daysId) 
{ 
    result[id] = new List<DaysOfTheWeek>(); 
    BitArray ba = new BitArray(new int[]{id}); 
    for (int i=0;i<ba.Length;i++) 
    { 
     if (ba[i]) 
     { 
      result[id].Add((DaysOfTheWeek)(1 << i)); 
      Console.WriteLine((DaysOfTheWeek)(1 << i)); 
     }      
    } 
    Console.WriteLine("id-" + id + " > " + (DaysOfTheWeek)id);     
} 

Console.ReadKey(); 

Проверьте выход и посмотреть, если это то, что вы хотите. Вы можете использовать прямое преобразование в дни недели, если хотите, (DaysOfTheWeek)id, или вы можете получить каждый DaysOfTheWeek отдельно. Я сделал оба выше.

Смежные вопросы