Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
34 / 28 / 27
Регистрация: 23.02.2016
Сообщений: 367
07.11.2017, 16:04  [ТС] 1
Лучший ответ Сообщение было отмечено Kotyara0live как решение

Решение

Author24 — интернет-сервис помощи студентам
Привет, подскажите если у меня есть массив классов и мне нужно определить реализуют ли его члены некий интерфейс
какой самый короткий способ ?
вот мой вариант (допустим в данном примере я точно не знаю реализуют ли все классы интерфейс)
C#
1
2
3
4
5
6
7
8
9
            object[] arIDraw = { new Shape(), new Knife(), new Home(), new Weapons() };
            for (int i = 0; i < arIDraw.Length; i++)
            {
                IDraweble id = arIDraw[i] as IDraweble;
                if (id != null)
                {
                    id.Draw();
                }
            }
вот пример если я знаю что в массиве все классы подходящие
C#
1
2
3
4
5
6
7
8
9
10
            IDraweble[] arIDraw = { new Shape(), new Knife(), new Home() };
            foreach (IDraweble arD in arIDraw)
            {
                IDraweble id = arD as IDraweble;
                if (id != null)
                {
                    id.Draw();
                }
            }
            }
если ли более короткий способ ?
Заранее спасибо )
0
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,342
Записей в блоге: 1
07.11.2017, 16:14 2
Kotyara0live, во втором примере повторное приведение типа с помощью as не нужно. Переменная arD уже имеет тип IDraweble. Упростить можно с помощью метода OfType
C#
1
foreach (IDraweble arD in arIDraw.OfType<IDraweble>()) arD.Draw();
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
07.11.2017, 18:52 3
1
C#
1
2
object[] arIDraw = { new Shape(), new Knife(), new Home(), new Weapons() };
for (int i = 0; i < arIDraw.Length; i++) (arIDraw[i] as IDraweble)?.Draw();
2
C#
1
2
IDraweble[] arIDraw = { new Shape(), new Knife(), new Home() };
foreach (var arD in arIDraw) arD.Draw();
0
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru