2

我正在加载一个 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
4

7 回答 7

5

调试时,第一个可以更容易地检查ListItem正在添加的内容。

第一个也有较低的宽度,有些人可能会觉得更容易阅读(但较高的高度,有些人可能会觉得更难阅读......)

于 2009-07-21T13:08:10.753 回答
0

我认为它们之间没有任何真正的性能差异,也没有正确性差异。

我认为第一个更容易调试,因为你可以很容易地停在 Add 行并查看 li 的内容。

于 2009-07-21T13:07:11.800 回答
0

我认为1两者实际上都会编译为相同的字节码。但是,我通常只在要使用新变量时才倾向于引入它们。或者当它使代码更清晰时。在这种情况下,语句几乎不会很复杂,并且可以立即看到您在做什么,因此使用临时变量可能没有真正的好处。

1这只是一个猜测。使用反射器或类似物进行验证。

于 2009-07-21T13:07:34.560 回答
0

seconf 与第一个相比的唯一优点是它消除了仅使用一次的变量。重构中的某些东西有时是可取的。

另一方面,使用像这样的中间变量可以通过稍微分解所涉及的步骤来使代码更具可读性。

于 2009-07-21T13:09:20.553 回答
0

我最初会使用方法 1 编写它并进行调试,然后在我让它与我的示例数据一起工作后重构为方法 2。

于 2009-07-21T13:15:36.930 回答
0

您也可以使用 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));
}
于 2009-07-21T13:24:02.723 回答
0

我认为这两个例子是等价的,但我更喜欢后者。

于 2009-07-21T13:24:50.757 回答