Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > refactoring


Автор: blackwitcher 5.9.2017, 12:56
Код

private void singleChoiceAction1_Execute(object sender, SingleChoiceActionExecuteEventArgs e)
        {
            var selectedItem = singleChoiceAction1.SelectedItem.Id;

            if (selectedItem == 1.ToString())
            {
                _gridView.Columns["Rating"].Visible = true;
                _gridView.Columns["Price"].Visible = false;
            }
            else
            {
                _gridView.Columns["Rating"].Visible = false;
                _gridView.Columns["Price"].Visible = true;
            }
           
        }


нужна помощь по рефакторинга метода

то есть, со временем может быть добавлено другие поля кроме "Rating" и "Price", и мне не нужно будет вписывать вручную smile 

Автор: blackwitcher 5.9.2017, 15:10
Код

public enum Change:byte
    {
        Rating,
        Price
    }

Код

 private void GetValue()
        {
            singleChoiceAction1.Items.Clear();
            singleChoiceAction1.Items.Add(new ChoiceActionItem(Change.Rating.ToString(),Change.Rating));
            singleChoiceAction1.Items.Add(new ChoiceActionItem(Change.Price.ToString(),Change.Price));
        }

Код

private void singleChoiceAction1_Execute(object sender, SingleChoiceActionExecuteEventArgs e)
        {
            SelectedItem();
        }

        private void SelectedItem()
        {
            var selectedItem = singleChoiceAction1.SelectedItem.Id;
            if (selectedItem == nameof(Course.Rating))
            {
                ShowRating();
            }
            if (selectedItem == nameof(Course.Price)) 
            {
                ShowPrice();
            }
        }

        private void ShowPrice()
        {
            _gridView.Columns[nameof(Course.Rating)].Visible = false;
            _gridView.Columns[nameof(Course.Price)].Visible = true;
        }

        private void ShowRating()
        {
            _gridView.Columns[nameof(Course.Rating)].Visible = true;
            _gridView.Columns[nameof(Course.Price)].Visible = false;
        }

Автор: diadiavova 17.9.2017, 23:35
Цитата(blackwitcher @  5.9.2017,  12:56 Найти цитируемый пост)
то есть, со временем может быть добавлено другие поля кроме "Rating" и "Price", и мне не нужно будет вписывать вручную 

Непонятно, что это значит. Если ты изменяешь значения этих полей, то при чем тут другие поля?
По коду. Не знаю, что именно ты хочешь достичь оптимизацией, но если надо сократить, то код из первого поста можно записать одной строкой
Код

_gridView.Columns["Price"].Visible = !(_gridView.Columns["Rating"].Visible = singleChoiceAction1.SelectedItem.Id == 1.ToString());


Автор: blackwitcher 18.9.2017, 10:09
Спасибо, diadiavova

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)