Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在方法中放置局部变量声明的最佳实践?_C#_Variables_Coding Style_Local Variables - Fatal编程技术网

C# 在方法中放置局部变量声明的最佳实践?

C# 在方法中放置局部变量声明的最佳实践?,c#,variables,coding-style,local-variables,C#,Variables,Coding Style,Local Variables,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() { v

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;
}

这只是个人喜好,是最容易阅读和理解的

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


在C语言中,在开始时声明它们是我个人的偏好,但我必须在开始时声明它们。

我更喜欢你的示例2,因为它的行数较少,这通常意味着更容易阅读和更少的bug

对于简短的方法(你所有的方法都是简短的,对吗?)没有多大区别

但我会避免不必要的初始化变量,您将始终在随后设置这些变量:

void myMethod()
{
    var example = String.Empty;  // Unnecessary initialization
    var xmlDoc = new XmlDocument();

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

避免这一点自然会导致您在第一次初始化变量的位置声明变量,即示例2。

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


谢天谢地,C#远高于IL,所以我们不必担心这些细节。从这个约束中解放出来,限制变量的范围有很多概念上的价值,因为这意味着要理解变量发生了什么,您需要查看的代码更少。在方法顶部声明的变量可能在该方法中的任何位置使用。在内部“if”中声明的变量仅在该范围内使用,一旦超出该范围,就可以忽略它;此外,在方法后面声明的变量只能在声明之后使用。它是微型的隔离/封装,进一步减少了开发人员为了理解给定代码段正在做什么而必须立即考虑的事情的数量。

在C99中,它不再是强制性的。我不使用C99,但讨厌没有bools:)为什么不使用它呢?只是因为目前并不是所有的编译器都完全支持它。