Member 14800672 Ответов: 2

Как получить идентификаторы неиспользуемых перечислений?


if i have an enum

enum days
{
sun
mon
tue
wed
thu
fri
sat
}

and i have a list of days called D that contains sun,mon,tue,wed

i want to return the enum ids that are not used, so i need the ids of thu,fri and sat


Что я уже пробовал:

i was able to get the names itself but i couldn't get the ids


<pre>  
 List<string> Days = Enum.GetNames(typeof(WeekDay)).ToList();
 var closed = Days.Except(D); // D is the list of days i mentioned above


так что теперь у меня есть чт,пт и СБ, но мне нужны идентификаторы, так чем же я могу заменить Enum.getNames?

2 Ответов

Рейтинг:
1

OriginalGriff

Это зависит от того, что содержит D: в данный момент он содержит строки, поэтому вам придется преобразовать строки обратно в значения перечисления:

var closed = Days.Except(D).Select(d => Enum.Parse(typeof(days), d));


Рейтинг:
1

Bertha Wwallace

Либо ваш список D уже имеет тип days, то

{
    List<days> Days = Enum.GetValues(typeof(days)).OfType<days>().ToList();
    var D = new days[] { days.sun, days.mon, days.tue, days.wed };
    var closed = Days.Except(D);
}

или он состоит из струн, тогда
{
    List<days> Days = Enum.GetValues(typeof(days)).OfType<days>().ToList();
    List<(days, string)> DaysAndNames = Days.Select(day => (day, Enum.GetName(typeof(days), day))).ToList();
    var D = new string[] {"sun", "mon", "tue", "wed" };
    var DAsdays = D.Select(d => DaysAndNames.Where(dn => dn.Item2 == d).Select(dn => dn.Item1).FirstOrDefault()).ToList();
    var closed = Days.Except(DAsdays);
}

Удачи вам!


BillWoodruff

имейте в виду, что "новички" могут бороться с такими вещами, как использование кортежей, если их использование в ответе не объяснено. простое решение может оказаться более полезным, чем сложное.