在此示例中使用临时变量或内联?

时间:2009-07-21 13:05:00

标签: .net variables inline-code

我正在加载一个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 个答案:

答案 0 :(得分:5)

调试时,第一个更容易检查正在添加的ListItem

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

答案 1 :(得分:0)

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

我认为第一个更容易调试,因为您可以轻松停止添加行并查看li的内容。

答案 2 :(得分:0)

我认为 1 两者都将实际编译为相同的字节码。但是,当我打算使用它们时,我通常只会引入新的变量。或者当它使代码更清晰时。在这种情况下,语句几乎不是非常复杂,并且可以立即显示您正在做的事情,因此使用临时变量可能没有任何实际好处。

1 这只是猜测。使用Reflector或类似方法进行验证。

答案 3 :(得分:0)

seconf优于第一个的唯一优点是它消除了仅使用一次的变量。有时需要重构的东西。

另一方面,使用这样的中间变量可以通过稍微破坏一些步骤来使代码更具可读性。

答案 4 :(得分:0)

我最初会使用方法1编写它并使用方法1进行调试,然后在我的样本数据运行良好后重构到方法2。

答案 5 :(得分: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));
}

答案 6 :(得分:0)

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