方法内本地变量声明放置的最佳实践是什么?

3
C#最佳实践是在方法的顶部声明所有局部变量还是在第一次使用时声明它们?
示例1:
void myMethod()
{
    var example = String.Empty;
    var xmlDoc = new XmlDocument();

    xmlDoc.LoadXml("c:\my.xml");
    example = doc.SelectSingleNode("//TestNode").OuterXml;
}

示例2:

void myMethod()
{
    var xmlDoc = new XmlDocument();

    xmlDoc.LoadXml("c:\my.xml");
    var example = doc.SelectSingleNode("//TestNode").OuterXml;
}
3个回答

6

在许多语言中,历史上变量是在前面声明的,因为您需要指示编译器关联寄存器和/或为它们分配堆栈空间。在.NET中,这实际上仍然需要在IL代码中进行,因为这使得编译器的工作更容易。

幸运的是,C#比IL要高级得多,所以我们不必担心那些细节。摆脱了这个限制,限制变量的范围有很多概念上的价值,因为这意味着您需要查看的代码更少来了解该变量发生的事情。在方法顶部声明的变量可能会在该方法的任何位置使用。在内部“if”中声明的变量仅在该范围内使用,一旦超出该范围,可以将其忽略。此外,在方法后面声明的变量只能在声明后使用。这是微型的隔离/封装,进一步减少了开发人员在理解给定代码执行的操作时需要考虑的事情数量。


1
我更喜欢你的第二个例子,因为它的代码行数较少,一般来说这意味着更易于阅读和减少错误。
对于短的方法(而且你所有的方法都很短,对吗?)这并没有太大的区别。
但我会避免不必要的变量初始化,因为你随后总是会设置它们:
void myMethod()
{
    var example = String.Empty;  // Unnecessary initialization
    var xmlDoc = new XmlDocument();

    xmlDoc.LoadXml("c:\my.xml");
    example = doc.SelectSingleNode("//TestNode").OuterXml;
}

避免这种情况自然而然地导致您在首次初始化变量时声明变量,即您的示例2。

0

这只是个人偏好,任何最容易阅读和理解的方式都可以。

我习惯在方法开始时声明变量,因为我习惯在C语言中这样做。

在C#中,将它们放在开头声明是我的个人偏好,但在C中,我必须在开头声明它们。


在C99中,这不再是强制性的。 - Étienne
我不使用C99,虽然很讨厌没有布尔类型 :) - Xela
为什么不使用它? - Étienne
目前只是因为并不是所有编译器都完全支持它。 - Xela

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接