我在公司代码库(.NET 3.5应用程序)的各处看到以下代码模式:
bool Foo(int barID, out Baz bazObject) {
try {
// do stuff
bazObject = someResponseObject;
return true;
}
catch (Exception ex) {
// log error
return false;
}
}
// calling code
BazObject baz = new BazObject();
fooObject.Foo(barID, out baz);
if (baz != null) {
// do stuff with baz
}
我试图绕开为什么要这样做,而不是让Foo
方法简单地获取ID并返回一个Baz
对象,而不是返回未使用的值并使实际对象成为ref或output参数,这是我的头绪。
我缺少这种编码样式的一些隐藏优势吗?
相关话题:什么时候和为什么你应该用void(而不是即布尔/ INT)
—
彼得Török
在你的榜样,
—
史蒂夫·鲍威尔
baz
是null
与返回的bool
存在false
是不等价的。new BazObject()
从来都不是null
,所以除非bazObject
之前被更新Exception
时抛出Foo
,当false
返回baz
永远不会null
。如果有相应的规范,那将有很大的帮助Foo
。实际上,这也许是此代码所表现出的最严重的问题。
我的记忆很模糊,因为这是很久以前的事了,但是我认为我弄乱了这个示例,它正在检查“ baz”是否为假,而不是为null。无论如何,这种模式对我来说似乎都是过时的,就像来自VB6一样,并且开发人员从来没有费心去改进他的代码(他没有这样做)
—
Wayne Molina 2014年