输出参数有什么问题?

Chr*_*all 9 c# sql vb6 vba

在SQL和C#中,我从来都不喜欢输出参数.我从未在VB6中传递参数ByRef.关于计算副作用以完成某些事情的事情只会困扰我.

我知道它们是一种无法从函数返回多个结果的方法,但SQL中的行集或C#和VB中的复杂数据类型也同样适用,并且对我来说似乎更自我记录.

我的想法有什么问题,还是来自权威来源的资源支持我?你个人对此有何看法以及为什么?对于想要设计输出参数可能会说服他们使用不同结构的同事,我能说些什么呢?

编辑:有趣的转 - 我问这个问题的输出参数是用来代替返回值.当返回值为"ERROR"时,调用者应该将其作为例外处理.我这样做但对这个想法并不满意.一位同事没有被告知有必要处理这种情况,因此,由于程序无声地失败,大量资金丢失了!

Bri*_*sio 28

输出参数可能是代码气味,表明您的方法做得太多.如果您需要返回多个值,则该方法可能不止一件事.如果数据紧密相关,那么它可能会从包含两个值的类中受益.

当然,这并非总是如此,但我发现通常就是这种情况.

换句话说,我认为你应该避免它们.


And*_*ven 20

他们有自己的位置.Int32.TryParse方法是有效使用out参数的一个很好的例子.

bool result = Int32.TryParse(value, out number);
if (result)
{
    Console.WriteLine("Converted '{0}' to {1}.", value, number);         
}
Run Code Online (Sandbox Code Playgroud)

  • 我个人更喜欢"int?Int32.TryParse(string value)"作为签名,因为那时你可以使用?? 运算符指定回退值.但是这个功能是在Nullables推出之前编写的. (10认同)
  • 我不同意... Int32.TryParse()应该返回一个int?任何Try*方法都应该返回一个可以为空的类型......它读得更好而且更容易使用.我为字符串创建了完全相同的扩展方法."1".AsInt(),"1.5".AsDouble(),"true".AsBool()等 (5认同)

Jar*_*yer 11

Bob Martin写了关于这个清洁代码的文章.输出参数打破了函数的基本思想.

output = someMethod(input)