示例1:
SomeObject someObject = new SomeObject();
if (someObject.Method())
{
//do stuff
}
//someObject is never used again
VS
示例2:
if (new SomeObject().Method())
{
//do stuff
}
第二种方法使用第一种方法有什么好处,反之亦然?
答案 0 :(得分:12)
至少有三个潜在的好处:
可读性:在许多情况下,第一个比第二个示例的语法更明显,特别是对于较新的开发人员。
更好的调试经验:如果SomeObject
的构造函数抛出异常,在第一种情况下,调试器将在该行上中断。在第二种情况下,异常是在构造函数还是方法中并不明显。设置断点和检查对象上的值也会出现同样的问题 - 在第二种情况下这将很难,并且需要在方法内部设置断点。
在第一种情况下,您可以使用该单个调用之外的对象。如果你真的只需要一个方法进行单个调用,并且不需要对象引用,那么静态方法可能更合适。
答案 1 :(得分:3)
在大多数琐碎的情况下,编译器无论如何都会删除它。值类型有一个重点,即将其复制到变量中会克隆该值,因此可以表示重大更改 - 但不管怎样,您不应该鼓励可变的值类型。
对于浮点数,有一些边缘情况,当它使用本地时,你得到不同的答案(原生类型的宽度大于Single
/ Double
等) - 这也意味着你可以通过调试/发布获得不同的结果(取决于编译器是否删除了变量)。
在某些情况下,变量可以比堆栈上的值更多 - 即“捕获”到lambda / anon方法中,或者用于out
/ ref
,但是很少适用。
答案 2 :(得分:2)
在调试时能够看到值是有用的(如果对象是COM互操作或类似的东西,你需要处理它可能很重要的是保留引用,这样你就可以这样做以受控的方式)。
如果名称很长或者有多个嵌套级别,它也可以更容易阅读。
答案 3 :(得分:0)
我赞成提高可读性的第一个选项,例如:
var phoneNumberRx = new Regex(@"^\(\d{3}\)\d{3}-\d{4}$");