我在 C# 项目中注意到以下对象处理代码模式,我想知道它是否可以接受(尽管它有效)。
public object GetData()
{
object obj;
try
{
obj = new Object();
// code to populate SortedList
return obj;
}
catch
{
return null;
}
finally
{
if (obj != null)
{
obj.Dispose();
obj = null;
}
}
}
对于这个例子,我在项目中使用了一个通用的“对象”而不是实际的 IDisposable 类。
我知道每次都会执行“finally”块,即使返回值也是如此,但是由于对象被设置为 null (用于对象处理和 GC 目的)。
更新1:
我尝试了下面的代码片段,返回对象是非空的,虽然本地对象设置为空,所以它可以工作,考虑到下面的一些评论,这有点奇怪:
public StringBuilder TestDate()
{
StringBuilder sb;
try
{
sb = new StringBuilder();
sb.Append(DateTime.UtcNow.ToString());
return sb;
}
catch
{
return null;
}
finally
{
sb = null;
}
}
顺便说一句,我使用的是 C# 4.0。
PS我只是在审查这个项目代码。我不是原作者。
更新 2:
找到了这个谜团的答案 [1]。finally 语句被执行,但返回值不受影响(如果在 finally 块中设置/重置)。