Использовать временную переменную или встроенную в этом примере? - PullRequest
2 голосов
/ 21 июля 2009

Я загружаю раскрывающийся список ASP.NET.

Есть ли преимущество в этом:

    Private Sub LoadSeasonsListbox(ByVal seasons As List(Of Season))
      Dim li As ListItem
      For Each s As Season In seasons
        li = New ListItem(s.SeasonDescription, s.SeasonCodeID)
        frm.SeasonsList.Items.Add(li)
      Next
    End Sub

за это:

Private Sub LoadSeasonsListbox(ByVal seasons As List(Of Season))
    For Each s As Season In seasons
        frm.SeasonsList.Items.Add(New ListItem(s.SeasonDescription, s.SeasonCodeID))
    Next
End Sub

Ответы [ 7 ]

5 голосов
/ 21 июля 2009

При отладке первое облегчает проверку добавляемого ListItem.

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

0 голосов
/ 21 июля 2009

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

0 голосов
/ 21 июля 2009

Вы также можете сделать это с помощью LINQ (и C #, потому что я не могу написать код VB.NET;).

private void LoadSeasonsListbox(IEnumerable<Season> seasons)
{
    frm.SeasonsList.Items.AddRange(seasons
        .Select(s => new ListItem(s.SeasonDescription, s.SeasonCodeID))
        .ToArray());
}

Я предпочитаю это решение, потому что ненавижу этот цикл, просто копируя или переводя объекты - они так сильно загромождают код. Я бы даже подумал о написании метода расширения.

private void LoadSeasonsListbox(IEnumerable<Season> seasons)
{
    frm.SeasonsList.Items.AddRange(
        seasons.ToListItems(s => s.SeasonDescription, s => s.SeasonCodeID));
}
0 голосов
/ 21 июля 2009

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

0 голосов
/ 21 июля 2009

Единственным преимуществом secondf над первым является то, что он исключает переменную, которая используется только один раз. Что-то, что в рефакторинге иногда желательно.

С другой стороны, использование такой промежуточной переменной может сделать код немного более читабельным, разбив несколько шагов вниз.

0 голосов
/ 21 июля 2009

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

1 Это всего лишь предположение. Проверьте с помощью Reflector или аналогичного.

0 голосов
/ 21 июля 2009

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

Я думаю, что первый легче отладить, потому что вы можете легко остановиться на строке Add и просмотреть содержимое li.

...