【发布时间】:2009-05-13 09:03:58
【问题描述】:
编程这种风格是否有充分的理由(优势)
XmlDocument doc = null;
doc = xmlDocuments[3];
对
XmlDocument doc = xmlDocuments[3];
我看过很多次,但对我来说似乎过于冗长
【问题讨论】:
标签: c# coding-style
编程这种风格是否有充分的理由(优势)
XmlDocument doc = null;
doc = xmlDocuments[3];
对
XmlDocument doc = xmlDocuments[3];
我看过很多次,但对我来说似乎过于冗长
【问题讨论】:
标签: c# coding-style
不 - 通常认为最好的做法是尽可能晚地声明变量,最好在声明时设置它。我唯一不这样做的时候是我必须有条件地设置一个变量,或者它被设置在一个更严格的范围内:
String name;
using (TextReader reader = ...)
{
// I can't declare name here, because otherwise it isn't
// accessible afterwards
name = reader.ReadToEnd();
}
尽可能在首次使用时声明的原因:
【讨论】:
我会用
XmlDocument doc = xmlDocuments[3];
声明变量的使用位置。
【讨论】:
它们是不同的风格,客观上它们都不比另一个更好。这只是口味问题。你可以先声明变量,然后给它赋值:
XmlDocument doc;
doc = xmlDocuments[3];
或者你可以在同一个语句中做这两个:
XmlDocument doc = xmlDocuments[3];
但是,这种形式:
XmlDocument doc = null;
doc = xmlDocuments[3];
给变量分配一个空引用然后立即用不同的引用替换它是完全没有意义的。
【讨论】:
理想情况下,声明和赋值应该配对以提高代码的可读性。事实上,ReSharper 会发现任何例外情况并建议加入。
【讨论】:
正如其他人指出的那样,如果您需要在循环范围之外声明变量,则第一种样式可能很有用,如果或其他。但在大多数情况下,我认为这种风格是 Visual Basic 6(及更早版本)旧时代的遗留物,在这种情况下,您总是必须在使用 in 之前声明一个变量。
旧的 VB 不支持你的第二种风格,因此第一种风格仍然流行......
【讨论】:
如果变量 'doc' 是在 在声明之后 赋值的,那么不,我看不出你有什么理由要这样做。无论如何,这肯定不是我的风格。
【讨论】:
我喜欢将变量视为“共享”或“不共享”,因为有些变量需要在类或方法的多个位置使用,而有些则只需要使用一次。 对于前者,我将它们全部声明在相关块的顶部,后者我在使用它们之前声明它们。
这完全取决于您需要在哪里使用它们。
案例一:
Xyz xyz = new Xyz; // Declared at the top.
// Loads of unrelated code in-between...
xyz.abc();
// More unrelated code in-between...
xyz.def(stuff);
案例 2:
// Loads of unrelated code above...
Xyz xyz = new Xyz; // Declared in a 'block'.
xyz.abc();
xyz.def(stuff);
xyz.destroy();
// More unrelated code below...
【讨论】:
我主要同意 Jon(更不用说通常我必须同意他 :-)。
你有选择:
1.
//Do something...
XmlDocument doc = xmlDocuments[3];
//use doc
//Do something...
2.
//Do something...
XmlDocument doc = null;
doc = xmlDocuments[3];
//Use doc
//Do something...
3.
//Do something...
XmlDocument doc = null;
//...Do something with other variables etc...
doc = xmlDocuments[3];
//Do something...
//Use doc
4.
//Do something...
XmlDocument doc = null;
//...Do something with other variables etc...
doc = xmlDocuments[3];
//Use doc
//Do something...
5.
//Do something...
XmlDocument doc = null;
doc = xmlDocuments[3];
//Do something...
//Use doc
6.
//Do something...
XmlDocument doc = xmlDocuments[3];
//Do something...
//use doc
我希望您能看到选项 1 很有意义。
最好将声明、定义和初始化尽可能“放在一起”。 选项 1 是在一行中一起完成声明、定义和初始化的示例。你可以进一步压缩它:
var doc = xmlDocuments[3];
词汇(与语言无关):
我希望这会有所帮助。
【讨论】:
我更喜欢用这个:
XmlDocument doc = null;
//blah blah
doc = xmlDocuments[3];
我只想在需要时分配和使用'doc'..
如果我想在分配后立即使用它,我会选择
XmlDocument doc = xmlDocuments[3];
【讨论】:
我会去
void Foo()
{
XmlDocument doc;
//Do other code here
//Create doc
doc = xmlDocuments[3];
}
因为 doc 可能要等到该方法的后期才会使用。在使用之前创建文档更有意义。更容易阅读(更少滚动)。
【讨论】:
如果可能,我总是尝试在同一行上声明和分配变量,所以在这种情况下,我会尝试使用第二个选项。在阅读代码时也要记住更少的代码行,更少的声明变量。最后,我认为这完全取决于您和您的团队使用的编码规则。我们的编码规则要求在方法的开头声明所有局部变量,所以我已经看到了这两种编程风格。
【讨论】: