Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> аргументы функции, чтоб аргумент ф. был всегда правильный 
V
    Опции темы
Bogdan1024
  Дата 5.8.2006, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

Репутация: 5
Всего: 13



Нужно чтобы функция void myfunc(mytype o) принимала одно из четырёх заведомо заданных (тоесть, они в этом классе прописанны как const) возможных значений одного типа, например, "a", "bb", "ccc" и "d4". Каким сделать тип mytype? Чтобы вообще предотвратить возможность получения функцией неверных значений?


--------------------
user posted image
PM MAIL   Вверх
mr.DUDA
Дата 5.8.2006, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



В таких случаях используется enum. Если нужны значения любого типа, то enum не катит. При проверке аргументов, если какой-нибудь аргумент содержит недопустимое значение, то кидают исключение ArgumentException с именем аргумента и объяснением причины - тогда проблему хотя бы можно будет отловить при отладке.


--------------------
user posted image
PM MAIL WWW   Вверх
Exception
Дата 6.8.2006, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Хехе.. На Spec# или Nemerle (используя макросы Design by contract) можно было бы написать вот такое:
Код
void SomeFunction (string s)
  requires s == "a" || s == "b"
{ ... }
Возможно, когда-нибудь это будет и в С#, а пока что проверяй аргументы на входе и бросай исключения smile .
PM   Вверх
Bogdan1024
Дата 6.8.2006, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

Репутация: 5
Всего: 13



Если использовать enum, то можно передать множество. 
Прийдётся использовать двухэлементный массив типа bool, а те константы выкавыривать отдельно.
Спасибо за ответы.

Это сообщение отредактировал(а) Bogdan1024 - 6.8.2006, 10:42


--------------------
user posted image
PM MAIL   Вверх
Exception
Дата 6.8.2006, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Не понял -- что значит "передать множество"?
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0464 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.