传递一个方法(返回一个值)作为参数是一件坏事吗?

时间:2012-05-21 19:02:07

标签: .net vb.net methods parameters

例如,我有这个方法:LoadFunkyInfo(byval funkyData as string)我传递的内容如下:LoadFunkyInfo(giantTable.Rows.Item(0).Item("blahName"))。我应该这样做吗?

dim foo as string = giantTable.Rows.Item(0).Item("blahName")
LoadFunkyInfo(foo)

我很久以前就读到了,将方法分配给变量并将该变量传递给方法更好,而不是将该方法作为参数传递。这仍然是真的吗?还是真的?

注意:我使用的是VB.Net 3.5

5 个答案:

答案 0 :(得分:5)

您没有传递方法,而是传递调用方法的结果。引入临时变量的唯一优点是帮助您调试:如果在第二行放置断点,您将能够看到传递给LoadFunkyInfo的值。除此之外,两次调用是相同的。

答案 1 :(得分:4)

首先,您没有将方法作为参数传递。您将方法返回的值作为参数传递。

其次,它主要是可读性问题。我个人觉得在大多数情况下首先将值赋给变量更具可读性。

答案 2 :(得分:3)

执行后者(分配给临时变量)有助于调试。

它允许您在分配上设置断点并查看结果。

有些编译器会将带有临时变量的版本转换为没有使用某些优化标志构建的版本(比如Release而不是Debug)。

传递的值不是方法 - 它是方法中返回的,正如临时变量所发生的那样 - 它被赋予返回的值,然后该值被传递作为参数。

答案 3 :(得分:3)

我认为如果你想多次使用第一个函数返回的数据,这主要取决于事实。例如,如果你有这样的东西:

LoadFunkyInfo(giantTable.Rows.Item(0).Item("blahName"))
LoadOtherFunkyInfo(giantTable.Rows.Item(0).Item("blahName"))

然后最好存储返回的值,而不是两次调用方法:

dim foo as string = giantTable.Rows.Item(0).Item("blahName")
LoadFunkyInfo(foo)
LoadOtherFunkyInfo(foo)

否则无需存储值。

答案 4 :(得分:2)

这是一个品味问题,你认为最容易阅读。编译为完全相同的代码。对于给出的示例,我不希望看到瞬态变量'foo',并且通常定义变量只是为了在下一个语句中传递它们将是不雅观的。但是,函数调用是否有很多参数,参数是其他具有长名称的函数,然后也很难读取。

我想说只有当它从代码中消除歧义时才使用它。