powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / C#: Получение значений из списка, который находится в другом списке
10 сообщений из 10, страница 1 из 1
C#: Получение значений из списка, который находится в другом списке
    #38467254
Andemki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Определил следующие типы:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
//Тип с правами пользователей
    enum PrivilegesNames
    {
        ShowForm1,
        ShowForm2
    }
 
    //Тип пользователей
    class ChiefUsers
    {
        public int user_id { get; set; }
        public string user_name { get; set; }
        public List<PrivilegesNames> priveleges { get; set; }
 
        public ChiefUsers()
        {
            priveleges = new List<PrivilegesNames>();
        }
 
    }
 
  //Тип для установки прав пользователям
    class UserPrivileges
    {
        public UserPrivileges() { }
        private List<ChiefUsers> chief_users = new List<ChiefUsers>();
        private List<PrivilegesNames> priveleges = new List<PrivilegesNames>();
 
        public void SetUsersPrivileges()
        {
            ChiefUsers user1 = new ChiefUsers()
            {
                user_id = 1,
                user_name = "Пользователь1",
                priveleges = new List<PrivilegesNames> { PrivilegesNames.ShowForm1, PrivilegesNames.ShowForm2 }
            };
 
            ChiefUsers user2 = new ChiefUsers()
            {
                user_id = 2,
                user_name = "Пользователь2",
                priveleges = new List<PrivilegesNames> { PrivilegesNames.ShowForm1 }
            };
            chief_users.AddRange(new ChiefUsers[] { user1, user2});
        }
 
        public List<PrivilegesNames> GetPriveleges(int _user_id)
        {
            priveleges.Clear();
            priveleges = (from p in chief_users
                          where p.user_id == _user_id
                          select p.priveleges);
            return priveleges;
        }



Хочу получить список прав для заданного ID пользователя таким образом:
Код: c#
1.
2.
3.
priveleges = (from p in chief_users
                          where p.user_id == _user_id
                          select p.priveleges);



Но появляется ошибка: Ошибка 1 Не удается неявно преобразовать тип "System.Collections.Generic.IEnumerable<System.Collections.Generic.List<ConsolePrivileges.PrivilegesNames>>" в "System.Collections.Generic.List<ConsolePrivileges.PrivilegesNames>". Существует явное преобразование (возможно, пропущено приведение типов)

Как лучше скопировать нужные права в отдельный список?

Получилось только так...

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 foreach (ChiefUsers cu in chief_users)
            {
                if (cu.user_id == _user_id)
                {
                    foreach (PrivilegesNames pn in cu.priveleges)
                    {
                        priveleges.Add(pn);
                    }
                }
            }



Но перебирать все значения - не лучший вариант...

Спасибо!
...
Рейтинг: 0 / 0
C#: Получение значений из списка, который находится в другом списке
    #38467272
WitC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Andemki,
не уверен, попробуй поправить тип возвращаемый функцией
GetPriveleges в IEnumerable
либо явно приведи полученную из Linq коллекцию к List
что-то типа
Код: c#
1.
2.
3.
priveleges = (from p in chief_users
                          where p.user_id == _user_id
                          select p.priveleges).ToList();
...
Рейтинг: 0 / 0
C#: Получение значений из списка, который находится в другом списке
    #38467293
Andemki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WitC,

Попробовал изменить тип:
Код: c#
1.
IEnumerable<PrivilegesNames> GetPriveleges(int _user_id)


ничего не изменилось

Преобразовал коллекцию в List, появилась ошибка:
Ошибка 1 Неявное преобразование типа "System.Collections.Generic.List<System.Collections.Generic.List<ConsolePrivileges.PrivilegesNames>>" в "System.Collections.Generic.List<ConsolePrivileges.PrivilegesNames>" невозможно
...
Рейтинг: 0 / 0
C#: Получение значений из списка, который находится в другом списке
    #38467381
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andemki,
как то так
Код: c#
1.
2.
3.
4.
5.
6.
 public List<PrivilegesNames> GetPriveleges(int _user_id)
        {
            priveleges.Clear();
            chief_users.Where(a => a.user_id == _user_id).Select(f => f.priveleges).Aggregate(0,(e, c) => {c.ForEach(dd =>priveleges.Add( dd)); return e;});
            return priveleges;
        }
...
Рейтинг: 0 / 0
C#: Получение значений из списка, который находится в другом списке
    #38467436
Andemki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степи,

Спасибо большое!) Получилось :)
...
Рейтинг: 0 / 0
C#: Получение значений из списка, который находится в другом списке
    #38467505
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndemkiНо перебирать все значения - не лучший вариант...При помощи LINQ Вы ровно это и делаете.
...
Рейтинг: 0 / 0
C#: Получение значений из списка, который находится в другом списке
    #38467507
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи, SelectMany получше будет.
...
Рейтинг: 0 / 0
C#: Получение значений из списка, который находится в другом списке
    #38467541
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andemki
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
        public List<PrivilegesNames> GetPriveleges(int _user_id)
        {
            priveleges.Clear();
            priveleges = (from p in chief_users
                          where p.user_id == _user_id
                          select p.priveleges);
            return priveleges;
        }





Я конечно извиняюсь, но список priveleges получается один для всех пользователей, из какого бы места программы мы его не спросили
...
Рейтинг: 0 / 0
C#: Получение значений из списка, который находится в другом списке
    #38469127
Andemki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Pallaris,

Хм, странно. У меня разный получается:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
class Program
    {
        static void Main(string[] args)
        {
            UserPrivileges up = new UserPrivileges();
            up.SetUsersPrivileges();
            //список прав для первого пользователя
            string[] privileges_names_1 = (from p in up.GetPriveleges(1)
                                        select p.ToString()).ToArray();
            //список прав для второго пользователя
            string[] privileges_names_2 = (from p in up.GetPriveleges(2)
                                           select p.ToString()).ToArray();


            Console.WriteLine("Список прав для первого пользователя:");
            //ShowForm1
            //ShowForm2
            foreach (string name in privileges_names_1)
            {
                Console.WriteLine(name);
            }

            Console.WriteLine("Список прав для второго пользователя:");
            //ShowForm1
            foreach (string name in privileges_names_2)
            {
                Console.WriteLine(name);
            }

            Console.ReadLine();
        }
    }
...
Рейтинг: 0 / 0
C#: Получение значений из списка, который находится в другом списке
    #38469138
Andemki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAAndemkiНо перебирать все значения - не лучший вариант...При помощи LINQ Вы ровно это и делаете.
Т.е. разницы нет никакой перебирать значения в цикле foreach или делать тоже самое с помощью LINQ? Или что-то из этого, а может и другое быстрее и правильнее?
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / C#: Получение значений из списка, который находится в другом списке
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]