C# 在try内部或外部声明类对象?哪一个是最佳实践

C# 在try内部或外部声明类对象?哪一个是最佳实践,c#,coding-style,C#,Coding Style,在我的代码中,我需要创建FileInfo/StreamWriter类的对象。 这可以通过两种方式实现 FileInfo file = null; try { // now instantiate the object file = new FileInfo() } 或 哪一个更好?GC处理对象的方式有什么不同吗?视情况而定。您是否需要在try块之外访问文件?如果答案是“不,在任何情况下都不会”,那么在try块中声明它是一个好主意。如果答案是“是,在mycatch或finally块中或稍后在代码

在我的代码中,我需要创建FileInfo/StreamWriter类的对象。 这可以通过两种方式实现

FileInfo file = null;
try
{
// now instantiate the object
file = new FileInfo()
}


哪一个更好?GC处理对象的方式有什么不同吗?

视情况而定。您是否需要在
try
块之外访问
文件
?如果答案是“不,在任何情况下都不会”,那么在
try
块中声明它是一个好主意。如果答案是“是,在my
catch
finally
块中或稍后在代码中的某个地方”,那么您应该在
try
块之外声明它

至于你对绩效可能产生的影响的问题,忘掉这个问题吧


最后但并非最不重要的是,
GC
不处理任何东西。处置和
GC
是两件不相关的事情,
GC
不知道一次性对象和
IDisposable
接口的相关内容。

范围是所示两个示例之间的差异。除此之外,选择哪种方法是一个优先的问题。@Aominè除了作用域之外,GC将如何处理任何差异。我与技术SME进行了讨论,根据他的说法,如果在try内声明,GC将在执行try block后立即收集对象进行处理。然而,如果我们在外部定义,即使在方法调用结束后,它也会等待很长时间。我不完全同意他的观点,根据我的说法,如果我在外部声明,那么一旦方法执行结束,它将由GC收集。这没有什么区别,GC足够聪明,不会被声明搞混。背景资料。@MongZhu-hehe,lol.@InBetween如果我不是在try之外使用它,而是在try块之外声明是否有任何性能差异。GC将如何工作?@RavindraMehta no。
try
{
FileInfo file =  null;
file = new FileInfo()
}