Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/35: Рейтинг темы: голосов - 35, средняя оценка - 4.69
29 / 29 / 10
Регистрация: 28.10.2011
Сообщений: 183
1

Как передать коллекцию в качестве параметра ?

03.02.2013, 02:54. Показов 6688. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как передать коллекцию в качестве параметра, при условии что тип коллекции должен быть произвольным ?

Я пишу вот так, но студия мне говорит, что я чет не то пишу)) Ну точнее она мне говорит, что не может найти тип Т.
Как можно решить эту проблему?

C#
1
static public bool initializeCollection(DicIT<T> Collection)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.02.2013, 02:54
Ответы с готовыми решениями:

Как передать метод в качестве параметра
Добрый день. У меня следующий вопрос. Мне необходимо в метод, в виде параметра передать метод,...

Как передать делегат в качестве параметра другому делегату?
Здравствуйте. Хочу написать код, который содержит три делегата: delegate double...

Как передать Null в качестве параметра при инсерте в базу данных?
Подскажите как передать Null в качестве параметра при инсерте в базу данных

Открытие файла своим приложением - как передать путь к файлу в качестве параметра в приложение
создал многооконное приложение, которое открывает текстовые файла. На файле в свойствах изменил...

9
101 / 101 / 15
Регистрация: 23.05.2012
Сообщений: 260
03.02.2013, 03:15 2
Можно создать абстрактный класс или интерфейс для того что там может быть
или
передавай object, ты всегда можешь проверить что там за элемент через as или is (и еще over 9000 способами)
1
29 / 29 / 10
Регистрация: 28.10.2011
Сообщений: 183
03.02.2013, 03:28  [ТС] 3
Спасибо, я об object как то не подумал даже
0
Администратор
Эксперт .NET
9615 / 4757 / 761
Регистрация: 17.04.2012
Сообщений: 9,612
Записей в блоге: 14
03.02.2013, 08:48 4
Цитата Сообщение от Inocs Посмотреть сообщение
Как передать коллекцию в качестве параметра, при условии что тип коллекции должен быть произвольным
Тип коллекции или коллекция должна быть обобщённой? Судя по приведённому вами коду - второй вариант.
C#
1
public void InitCollection<T>(DicIT<T> collection)
Если действительно хотите произвольный тип - пусть ваш метод принимает в качестве параметра один из интерфейсов, что она реализует:
C#
1
public void InitCollection<T>(IEnumerable<T> collection)
Цитата Сообщение от DPW Посмотреть сообщение
передавай object, ты всегда можешь проверить что там за элемент через as или is
Используйте в последнюю очередь - приведение к типу object и обратно - удар по производительности, особенно в цикле, из-за упаковки\распаковки.
0
Эксперт .NET
17791 / 12942 / 3381
Регистрация: 17.09.2011
Сообщений: 21,219
03.02.2013, 09:31 5
Цитата Сообщение от tezaurismosis Посмотреть сообщение
приведение к типу object и обратно - удар по производительности, особенно в цикле, из-за упаковки\распаковки.
Это только к структурам относится.
1
Администратор
Эксперт .NET
9615 / 4757 / 761
Регистрация: 17.04.2012
Сообщений: 9,612
Записей в блоге: 14
03.02.2013, 09:35 6
Цитата Сообщение от kolorotur Посмотреть сообщение
Это только к структурам относится.
Да, точно.
0
Master of Orion
Эксперт .NET
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
03.02.2013, 10:30 7
Inocs, и еще: какую логику может содержать метод initializeCollection? Даже не знаю, что подумать, наверное условие проверяет или еще что? Хотя по имени метода не скажешь. Ведь в случае неудачного завершения просто нужно бросать исключение, а не возвращать какие-то булевские ерроркоды... Странно...
0
29 / 29 / 10
Регистрация: 28.10.2011
Сообщений: 183
03.02.2013, 18:16  [ТС] 8
Цитата Сообщение от Psilon Посмотреть сообщение
Inocs, и еще: какую логику может содержать метод initializeCollection? Даже не знаю, что подумать, наверное условие проверяет или еще что? Хотя по имени метода не скажешь. Ведь в случае неудачного завершения просто нужно бросать исключение, а не возвращать какие-то булевские ерроркоды... Странно...
Ну просто я не пришел еще к однозначному ответу(так как опыт у меня по C# достаточно скромный): что лучше, и как правильнее?
Выбрасывать исключение а потом его обрабатывать или просто получить return-ом false и сделать что-нибудь, что-бы там на уровне интерфейса сообщить пользователю о том, что по какой-то причине не загрузилась база.
0
Темная сторона .Net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
03.02.2013, 18:18 9
Цитата Сообщение от Psilon Посмотреть сообщение
нужно бросать исключение, а не возвращать какие-то булевские ерроркоды
почему? иногда неспешная работа метода возвращает -1,а не бросает исключение.
Смотря какая ситуация.
0
Master of Orion
Эксперт .NET
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
03.02.2013, 20:52 10
Хотя бы потому что классики советовали:
Используйте исключения
вместо кодов ошибок
В далеком прошлом многие языки программирования не поддерживали
механизма обработки исключений. В таких языках возможности обработки и получения
информации об ошибках были ограничены. Программа либо устанавливала флаг
ошибки, либо возвращала код, который проверялся вызывающей стороной. Оба
способа продемонстрированы в листинге 7.1.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class DeviceController { 
public void sendShutDownO { 
DeviceHandle handle = getHandle(DEVl); 
// Проверить состояние устройства 
if (handle != DeviceHandle.INVALID) { 
// Сохранить состояние устройства в поле записи 
retrieveDeviceRecord(handle); 
// Если устройство не приостановлено, отключить его 
if (record.getStatusO != DEVICE_SUSPENDED) { 
pauseDevice(handle); 
clearDeviceWorkQueue(handle); 
closeDevice(handle); 
} else { 
logger.log("Device suspended. Unable to shut down"); 
} 
} else { 
logger. 1og("Invalid handle for: " + DEVl.toStringO); 
} 
} 
}
У обоих решений имеется общий недостаток: они загромождают код на стороне
вызова. Вызывающая сторона должна проверять ошибки немедленно после
вызова. К сожалению, об этом легко забыть. По этой причине при обнаружении
ошибки лучше инициировать исключение. Код вызова становится более
понятным, а его логика не скрывается за кодом обработки ошибок.
В листинге 7.2 представлен тот же код с выдачей исключений в методах,
способных обнаруживать ошибки.
Обратите внимание, насколько чище стал код. Причем дело даже не в эстетике.
Качество кода возросло, потому что два аспекта, которые прежде были тесно
переплетены — алгоритм отключения устройства и обработка ошибок, — теперь
изолированы друг от друга. Вы можете рассмотреть их по отдельности и
разобраться в каждом из них независимо.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class DeviceControl1er { 
public void sendShutDownO { 
try { 
tryToShutDownO; 
} catch (DeviceShutDownError e) { 
logger.log(e); 
} 
} 
private void tryToShutDownO throws DeviceShutDownError { 
DeviceHandle handle = getHandle(DEVl); 
DeviceRecord record = retrieveDeviceRecord(handle); 
pauseDevice(handle); 
clearDeviceworkQueue(handle); 
closeDevice(handle); 
} 
private DeviceHandle getHandle(DeviceID id) { 
throw new DeviceShutDownErrorCInvalid handle for: " + id.toStringO); 
}
Начните с написания команды
try-catch-finally
У исключений есть одна интересная особенность: они определяют область
видимости в вашей программе. Размещая код в секции try команды try-catch-final 1у,
вы утверждаете, что выполнение программы может прерваться в любой точке,
а затем продолжиться в секции catch.
Блоки try в каком-то отношении напоминают транзакции. Секция catch должна
оставить программу в целостном состоянии, что бы и произошло в секции try.
По этой причине написание кода, который может инициировать исключения,
рекомендуется начинать с конструкции try-catch-final 1у. Это поможет вам
определить, чего должен ожидать пользователь кода, что бы ни произошло в коде try.
Допустим, требуется написать код, который открывает файл и читает из него
сериализованные объекты.
...
Лично я считаю, что Роберт Мартин достаточный авторитет, тем более, что он аргументирует
2
03.02.2013, 20:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.02.2013, 20:52
Помогаю со студенческими работами здесь

Передать тип в качестве параметра
Доброго времени суток уважаемые! Заинтересовала тема плагинов, и в соседней теме нашел вот такой...

Нужно передать в качестве параметра указатель на массив
Нужно передать в качестве параметра указатель на массив. Я так понимаю, есть несколько способов это...

Почему в SendKeys нельзя передать строку в качестве параметра
Доброго времени суток,столкнулся с такой вот проблемой,если использовать такой код : void...

Верно ли, что, чтобы передать лямбда выражение в качестве параметра, нужно использовать делегат?
Здравствуйте. Правильно ли я понимаю, что, чтобы передать функцию или лямбда выражение в качестве...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru