Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
GrafikRem
0 / 0 / 1
Регистрация: 28.11.2015
Сообщений: 47
#1

Как объединить два похожих метода, инвертировать < > и свойства

26.10.2017, 15:51. Просмотров 160. Ответов 2
Метки нет (Все метки)

Столкнулся с проблемой соединения двух методов, точнее раздвоения приложения на два режима. В первом режиме действия производятся с одним набором свойств, в другом, с другим подобным набором. Методы отличаются сравнением < > и изменением свойств.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
      
  private bool MovePricePush()
        {
            if (_pM.PricePush < _pM.OrderBook[0].Rate)
            {
                using (var cmTr = CmTrading.OpenSession())
                {
                    using (var trans = cmTr.BeginTransaction())
                    {
                        var order = cmTr.QueryOver<OrdersTrader>().Where(x => x.PairLabel == _ordersTrader.PairLabel)
                            .List()
                            .FirstOrDefault();
/* нужно менять PricePushBuy на  PricePushSell  и т.п.>>>*/
                           order.PricePushBuy = _pM.PricePush;
                        cmTr.SaveOrUpdate(order);
                        trans.Commit();
                    }
                }
            }
        }
Методов будет около 10, поэтому писать их два раза не хотелось бы.. неудобно будет корректировать код впоследствии.
Кто сталкивался с такой задачей подскажите:
1. как инвертировать < и > в зависимости от режима, пока на ум приходит только метод, который будет менять два аргумента местами, в зависимости от значения третьего. Но может есть способ покрасивее?
2. как менять свойства в зависимости от режима? создать класс и в нем метод возвращающий наборы свойств в зависимости от режима программы. НО как менять свойства в запросе Linq. ???

Добавлено через 13 минут
С обычными свойствами, я меняю возвращаемый объект.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
namespace Hunter
{
    public class PushMirror
    {
        public readonly Push PushM;
        public readonly Push PushMR;
        
 
        public PushMirror(OrdersTrader ordersTrader,OrderBook orderBook)
        {
            var mode = 1;
 
            var pushMBuy = new Push
            {
                Price = ordersTrader.PriceBuy,
                PricePush = ordersTrader.PricePushBuy,
                PercentStart = ordersTrader.PercentStartBuy,
                PercentLimit = ordersTrader.PercentLimitBuy,
                PercentEnd = ordersTrader.PercentEndBuy,
                OrderBook = orderBook.Bids,
            };
            var pushMSell = new Push
            {
                Price = ordersTrader.PriceSell,
                PricePush = ordersTrader.PricePushSell,
                PercentStart = ordersTrader.PercentStartSell,
                PercentLimit = ordersTrader.PercentLimitSell,
                PercentEnd = ordersTrader.PercentEndSell,
                OrderBook = orderBook.Asks,
            };
 
 
            switch (mode)
            {
                case 1:
                    PushM = pushMBuy;
                    PushMR = pushMSell;
                    break;
                case 2:
                    PushM = pushMSell;
                    PushMR = pushMBuy;
                    break;
                default: throw new Exception("Error in PushMirror!");
            }
        }
    }
 
    public class Push
    {
        public decimal Price;
        public decimal PricePush;
        public decimal PercentStart;
        public decimal PercentLimit;
        public decimal PercentEnd;
        public List<BidsAsks> OrderBook;
    }
}
Но как менять это в запросе Linq >>> order.PricePushBuy на order.PricePushSell ?? (в первом коде.)

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2017, 15:51
Ответы с готовыми решениями:

Объединить 2 похожих метода в один
есть написанные мной несколько методов public static List&lt;double&gt;...

Передача свойства класса как параметр метода
Добрый день! Пытаюсь передать свойство класса как параметр метода, пока не...

Как объединить два проекта
У меня есть два проекта: Заполнение анкеты и основная программа. При выборе...

Как объединить два условия?
private void TextBox_TextChanged(object sender, TextChangedEventArgs e) ...

Как объединить два объекта?
Доброго времени суток! Программа представляет собою стек, куда записываются...

2
woldemas
360 / 261 / 156
Регистрация: 06.09.2013
Сообщений: 810
26.10.2017, 17:23 #2
Цитата Сообщение от GrafikRem Посмотреть сообщение
как инвертировать < и > в зависимости от режима
Передавайте делегат или объект сравнивающий значения в ваш метод.
Цитата Сообщение от GrafikRem Посмотреть сообщение
как менять свойства в зависимости от режима? создать класс и в нем метод возвращающий наборы свойств в зависимости от режима программы. НО как менять свойства в запросе Linq.
Аналогично.
Смотрите какую я прикольную ООПэшную штуку придумал специально для вас:
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// Это наш объект с двум свойствами
class Obj {
    public int Prop1 { get; set; }
    public int Prop2 { get; set; }
}
 
// Это адаптер конкретные его реализации
// будут выбирать свойство
abstract class Adapter {            
    protected Obj _src;
    public Adapter() { }
    // Устанавливаем объект и возвращаем себя же
    // специально для Linq
    public Adapter FromObj(Obj src) {
        _src = src;
        return this;
    }
    public abstract int Prop { get; }
}
 
class AdapterForProp1 : Adapter {
    // Выбираем первое свойство
    public override int Prop  {  get { return _src.Prop1; }  }
}
 
class AdapterForProp2 : Adapter {           
    // Выбираем второе свойство
    public override int Prop {  get { return _src.Prop2; } }
}
 
// Это метод для примера
static IEnumerable<Obj>  MyFunction(Adapter adapter, IEnumerable<Obj> objects) {    
// Выбираем свойство присланным адаптером
    return objects.Where (obj => adapter.FromObj (obj).Prop > 2);
}

Только параллельно работать не будет, но можно допилить.
1
GrafikRem
0 / 0 / 1
Регистрация: 28.11.2015
Сообщений: 47
26.10.2017, 20:17  [ТС] #3
woldemas, спасибо.. вроде то что мне надо.. C# сила.
p.s.
php после 4 месячного перерыва и углубления в C#
-режет глаза и нервы.. придется все переписывать..))

Добавлено через 36 минут
woldemas, все шикарно и кратко!!! спасибище огромное.. мужик!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2017, 20:17

Как объединить два отсортированных массива?
int MyArr1 = new int; int MyArr2 = new int; for (int...

Как объединить два числа в одно?
К примеру есть числа 123 и 456, Как объединить эти два числа чтобы на выходе...

Как объединить два условия с вызовом IndexOf?
У меня есть 4 условия: if (a.IndexOf(&quot;@&quot;) &gt; -1) { } ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru