Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2013, 13:01   #1
Mixim
Форумчанин
 
Регистрация: 29.10.2009
Сообщений: 259
По умолчанию Корректное использование params

Приветствую, многоуважаемый народ.
В моем коде имеется метод со следующей сигнатурой:
Код:
void Boolean SendDataToPort(SerialPort Port, params Byte[] SendingData);
Без проблем могу использовать этот метод следующим образом:
Код:
SerialPort mySerialPort=new SerialPort(pathToSerialPort, baudrate);
SendDataToPort(mySerialPort, 0x00, 0x03, 0x05);
или так:
Код:
void OtherMethod(SerialPort Port, Byte[] Data)
{
//...
SendDataToPort(Port, Data);//Data - массив Byte
//...
}
, но не могу использовать его вот так:
Код:
void OtherMethod(SerialPort Port, Byte[] PartOfData)
{
//...
SendDataToPort(Port, PartOfData, 0x05);//PartOfData перекрывает params Byte[]
//...
}
Как можно поступить, чтобы была возможность использовать указанный метод в следующих форматах:
Код:
SendDataToPort(Port, 0x01, 0x02, PartOfData, 0x05, 0x06);
SendDataToPort(Port, 0x01, 0x02, 0x05, 0x06);
SendDataToPort(Port, Data, 0x05, 0x06);
SendDataToPort(Port, 0x01, 0x02, PartOfData);
SendDataToPort(Port, Data);
//разумеется, 0x01, 0x02 и т.д. взяты для примера, в реальности могут быть совсем другие байты
? Крайне не хочется городить дополнительно 4 новых метода. Думал использовать не массив, а List<Byte>, но это потребует нагромождения кода вроде:
Код:
myList.Insert(0, 0x01);
myList.Insert(0, 0x02);
myList.Add(0, 0x05);
myList.Add(0, 0x06);
Что посоветуете?
Из всех классических книг, посвященных программированию, ненавижу всего одну - русский перевод книги Роберта Седжвика-"Фундаментальные алгоритмы C++". Предпочитаю читать её в оригинале.
Mixim вне форума Ответить с цитированием
Старый 05.04.2013, 10:12   #2
inmyacid
Пользователь
 
Аватар для inmyacid
 
Регистрация: 17.04.2012
Сообщений: 42
По умолчанию

Должно помочь http://msdn.microsoft.com/ru-ru/library/dd264739.aspx
inmyacid вне форума Ответить с цитированием
Старый 05.04.2013, 10:58   #3
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Mixim

чтобы оно работало в том виде как ты хочешь - придется скатываться ниже плинтуса на уровень vba:

void Send(int port, params object[] data) { ... }

внутри функции доставать каждый агрумент и проверять его тип: byte - отсылаем сразу, byte[] - раскручваем массив

я бы посмотрел на вариант с IEnumerable<byte> - возможно, при вызове мотода последовательность удастся достраивать на лету (я точно не помню, надо читать доки)
Rififi вне форума Ответить с цитированием
Старый 06.04.2013, 03:53   #4
Mixim
Форумчанин
 
Регистрация: 29.10.2009
Сообщений: 259
По умолчанию

Цитата:
Сообщение от inmyacid Посмотреть сообщение
Спасибо, чуть позже посмотрю
Цитата:
Сообщение от Rififi Посмотреть сообщение
Mixim

чтобы оно работало в том виде как ты хочешь - придется скатываться ниже плинтуса на уровень vba:

void Send(int port, params object[] data) { ... }

внутри функции доставать каждый агрумент и проверять его тип: byte - отсылаем сразу, byte[] - раскручваем массив

я бы посмотрел на вариант с IEnumerable<byte> - возможно, при вызове мотода последовательность удастся достраивать на лету (я точно не помню, надо читать доки)
Тоже нашел в сети примерно такие же рекомендации (использовать object[] и парсить его в методе), но это лишние костыли, в которых легко запутаться в последующем. Предполагал, что может быть я чего-то не понимаю/не знаю, но видимо нет...
Ладно, почитаю по-подробнее гайды от Inmyacid, может быть что хорошее найду
Из всех классических книг, посвященных программированию, ненавижу всего одну - русский перевод книги Роберта Седжвика-"Фундаментальные алгоритмы C++". Предпочитаю читать её в оригинале.
Mixim вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что означает данная конструкция JobInfo := TJobInfo(Params); D-mon Общие вопросы Delphi 2 10.07.2012 19:31
НЕ корректное сохранение в БД GreenShuller БД в Delphi 5 14.06.2012 04:15
Где найти свойство Params? fs444 C++ Builder 1 04.09.2009 14:52
вопрос по ARequestInfo.Params CraZZy RabbIt Работа с сетью в Delphi 0 29.07.2009 01:16
Свойство Params компонента TQuery Washington БД в Delphi 3 07.02.2007 12:04