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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Убрать дубляж кода, проблема передачи аргумента 
:(
    Опции темы
ДобренькийПапаша
Дата 6.7.2011, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: нет
Всего: 7



Ситуация такая. Есть два цикла, тело которых почти идентично, исключая то, что оба они опираются на два разных ObservableCollection (заход в какой-либо из них происходит по условию):
Код

if(.......)
{
for (int i = 0, j=0; i < MoneyCoinsNominals.Count; i++)
                { 
                }
}
else
{
for (int i = 0; i < MoneyNotesNominals.Count; i++)
               {
               }
}


В теле цикла происходит обращение к полям класса, который содержится в коллекции. Есть способ как-то перенести всё в один метод?
Ну, передам как Type, но толку-то? В общем не понимаю как убрать ветвление.
Код

private Grid FormBlocks(PaymentDevices device, Type collection, string typeOfMoney)
        {
            
        }





--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
jonie
Дата 6.7.2011, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



Код

ObservableCollection some = FistCollection;
if(...) some = SecondCollection;
//use some here...
не?


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
ДобренькийПапаша
Дата 6.7.2011, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: нет
Всего: 7



Цитата(jonie @  6.7.2011,  15:07 Найти цитируемый пост)
не? 

Не думаю smile

Код

switch(paymentDevice.Type)
            {
                case DbInfrastructure.DeviceType.CoinDispenser:
                    {
                        typeOfMoney = "монет";
                        return FormBlocks(paymentDevice, MoneyCoinsNominals.GetType(), typeOfMoney);
                    }
                case DbInfrastructure.DeviceType.CashDispenser:
                    {
                        typeOfMoney = "купюр";
                        return FormBlocks(paymentDevice, MoneyNotesNominals.GetType(), typeOfMoney);
                    }
            }



Код

private Grid FormBlocks(PaymentDevices device, Type collection, string typeOfMoney)
        {
            
        }


Если буду передавать коллекцию, а в методе аргумент будет типа ObservableCollection, то приведение не будет выполнено - нужно специфицировать тип обобщения, т.е. <T>. А если специфицировать, то либо два метода разных и снова дубляж кода, либо в одном методе проверка на тип и снова дубляж кода из-за ветвления.

Это сообщение отредактировал(а) ДобренькийПапаша - 6.7.2011, 15:44


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
neutrino
Дата 15.7.2011, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: 3
Всего: 62



запость весь код...


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
Fitc
Дата 15.7.2011, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

Репутация: 3
Всего: 4



Можно использовать что то вроде этого:
Код

Action<MyClass> invoke=delegate(MyClass param)
{
//сюда можно впихнуть внешние данные (переменные)
};
Array.Foreach(myCollectionOfMyClassItems1,invoke);
Array.Foreach(myCollectionOfMyClassItems2,invoke);



Это сообщение отредактировал(а) Fitc - 15.7.2011, 22:44
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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