С Грязной Функция# - Рефакторинг


Просто начали убирать старую базу кода. Меня интересуют ваши перспективы и пути, что вы бы изменить следующие функции.

    private void MarkSelectedRow()
    {
        Object obj = Bankkonto1.Value;
        if ((obj != null) && (myBankkonten.Contains(obj.ToString())))
        {
            foreach (UltraGridRow myRow in Bankkonto1.Rows)
            {
                if (myRow.Cells[STR_Id].Text != obj.ToString()) 
                    continue;

                myRow.Selected = true;
                try
                {
                    hV_OPPanel1.SetBankListe(myBankkonten, Bankkonto1.SelectedRow.Index);
                }
                catch
                {}
                return;
            }
            if (Bankkonto1.Rows.Count > 0)
                Bankkonto1.Rows[0].Selected = true;
        }
        else
            SelectDefaultBank();

        try
        {
            Bankkonto2.Rows[Bankkonto1.SelectedRow.Index].Selected = true;
            BankkontoS.Rows[Bankkonto1.SelectedRow.Index].Selected = true;
            AutoBank.Rows[Bankkonto1.SelectedRow.Index].Selected = true;
            hV_OPPanel1.SetBankListe(myBankkonten, Bankkonto1.SelectedRow.Index);
        }
        catch
        {}
    }


    public void SetBankListe(BankAccountList bankliste, int SelectedIndex)
    {

        if (OPBankkonto.DataSource != bankliste)
            OPBankkonto.SetDataBinding(bankliste, "");

        OPBankkonto.ValueMember = "Id";
        OPBankkonto.DisplayMember = "DisplayText";
        OPBankkonto.DataBind();
        OPBankkonto.Rows[SelectedIndex].Selected = true;
    }

Спасибо, Алекс



624
4
c#
задан 14 ноября 2011 в 10:11 Источник Поделиться
Комментарии
2 ответа

Я хотел бы рассмотреть инвертирующий первом случае, чтобы сделать его проще и быстрее быть в курсе еще.


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


Я бы поменял

if (Bankkonto1.Rows.Count > 0)

чтобы, используя систему.Средства LINQ; :

if (Bankkonto1.Rows.Any())


Я хотел бы сохранить повторно значений в переменные.

string objValue = obj.ToString();
...
int selectedRow = Bankkonto1.SelectedRow.Index;


Я бы рефакторинг командлет foreach

        foreach (UltraGridRow myRow in Bankkonto1.Rows)
{
if (myRow.Cells[STR_Id].Text != obj.ToString())
continue;

в LINQ для выбора:

        var row = Bankkonto1.Rows.FirstOrdefault( r => r.Cells[STR_Id].Text == objValue);
if(row != null) {

5
ответ дан 14 ноября 2011 в 11:11 Источник Поделиться

тю
есть довольно много попробовать-поймать , который не делать ничего вообще...

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


  1. Удалить пустую попробовать-catch блоки и заменить его с Проппер проверки
    Если Bankkonto2 в нижней части имеет значение null, вы не установить выбранное свойство строки BankkontoS за счет исключения раньше. В моем коде я хочу, чтобы мои исключений не видела и не фиксируются системой, поэтому я могу это исправить. Ты не знаешь, что еще случилось в этот метод.

  2. Бросить выступая исключения, так что любой пользователь может изменить свой вклад, чтобы выполнить требования приложения или можете создать новый багтрекер проблему с Проппер информации.

  3. Попробуйте использовать локальные переменные вместо того, чтобы называть свойства снова и снова.
    Тока вы используете Bankkonto1.SelectedRow.Показатель в 5 раз. Если Propertycall Bankkonto1.SelectedRow занимает около 0.5 сек вы в настоящее время горит 2 сек :-) попробуйте redusing его там, где это возможно. Она также становится более читабельным.

Вы могли торговать:

if (myRow.Cells[STR_Id].Text != obj.ToString()) 

Против:

string currentCellText = myRow.Cells[STR_Id].Text;
string searchedCellText = obj.ToString();

if (currentCellText != searchedCellText)

Пример remocing блок try-catch блоки:
Код:

try
{
Bankkonto2.Rows[Bankkonto1.SelectedRow.Index].Selected = true;
BankkontoS.Rows[Bankkonto1.SelectedRow.Index].Selected = true;
AutoBank.Rows[Bankkonto1.SelectedRow.Index].Selected = true;
hV_OPPanel1.SetBankListe(myBankkonten, Bankkonto1.SelectedRow.Index);
}
catch
{}

Я бы попробовал что-то вроде:

if(Bankkonto1 ==null)
throw new System.NullReferenceException("Bitte ein Bankkonto angeben!");

if(Bankkonto1.SelectedRow== null)
throw new System.NullReferenceException("Bitte wählen Sie eine Zeile!");

int selectedIndex = Bankkonto1.SelectedRow.Index;

if (Bankkonto2 != null && selectedIndex < Bankkonto2.Rows.Count)
Bankkonto2.Rows[selectedIndex].Selected = true;
if (BankkontoS != null && selectedIndex < BankkontoS.Rows.Count)
BankkontoS.Rows[selectedIndex].Selected = true;
if (AutoBank != null && selectedIndex < AutoBank.Rows.Count)
AutoBank.Rows[selectedIndex].Selected = true;
if(hV_OPPanel1 != null)
hV_OPPanel1.SetBankListe(myBankkonten, selectedIndex);

Я бы рефакторинг это что-то вроде этого:

private void MarkSelectedRow() {

if (Bankkonto1 == null)
throw new System.NullReferenceException("Bitte ein Bankkonto angeben!");

if (Bankkonto1.SelectedRow == null)
throw new System.NullReferenceException("Bitte wählen Sie eine Zeile!");

Object obj = Bankkonto1.Value;
int selectedIndex = Bankkonto1.SelectedRow.Index;
if ((obj != null) && (myBankkonten.Contains(obj.ToString()))) {
foreach (UltraGridRow myRow in Bankkonto1.Rows) {

string currentCellText = myRow.Cells[STR_Id].Text;
string searchedCellText = obj.ToString();

if (currentCellText != searchedCellText)
continue;

myRow.Selected = true;

if(hV_OPPanel1 != null)
hV_OPPanel1.SetBankListe(myBankkonten, selectedIndex );

return;
}

if (Bankkonto1.Rows.Count > 0)
Bankkonto1.Rows[0].Selected = true;
} else
SelectDefaultBank();

if (Bankkonto2 != null && selectedIndex < Bankkonto2.Rows.Count)
Bankkonto2.Rows[selectedIndex].Selected = true;
if (BankkontoS != null && selectedIndex < BankkontoS.Rows.Count)
BankkontoS.Rows[selectedIndex].Selected = true;
if (AutoBank != null && selectedIndex < AutoBank.Rows.Count)
AutoBank.Rows[selectedIndex].Selected = true;

if(hV_OPPanel1 != null)
hV_OPPanel1.SetBankListe(myBankkonten, selectedIndex);

}



Надеюсь, я могу помочь, пожалуйста, свяжитесь со мной если у вас есть вопросы о моих фрагментов или если вы interssted в моих решениях. Я бы с удовольствием учусь у вас, а также будем рады помочь вам!

5
ответ дан 15 ноября 2011 в 09:11 Источник Поделиться