加入宣言和转让或不参加......这就是问题所在

时间:2010-01-27 16:34:46

标签: c#

关于调试有两种思路。一个人说首先声明你的变量,然后分配...以便于调试。

int myInt;
myInt = GetSomething();

或者有一种思想流派认为它不干净,只需这样做:

int myInt = GetSomething();

我不明白第一个是如何帮助的。因为如果我在任何一种情况下都将调试点放在myInt上,它会给我一个我可以检查的值。

有人可以在调试时详细告诉我,第一种方法如何值得投入2行?我知道有些人发誓。

显然有时你必须先做第一次,因为你可能需要做的不仅仅是一次性设置,比如设置一个对象的属性。但除此之外,设置变量的一次性调用是我在这里专门讨论的内容。

4 个答案:

答案 0 :(得分:7)

对我来说,只有2行才能检查return值,即

int myInt = GetSomething();
return myInt; <===== breakpoint here

(而不是return GetSomething();

除此之外,断点/手表应该可以正常工作。在发布版本中,您应该发现编译器已消除了额外的变量。在分配之前,这个值是没有意义的,那么有什么目的可以看一下额外的一行?只需使用内联初始化(如果您选择,这也允许var):

int myInt = GetSomething();

答案 1 :(得分:2)

我从未听说过那所学校。更多的代码行等于调试更多行,更多行要维护,更多行要逐步完成。

这始终是我的指导原则:正确,明确,简洁,快速。以该顺序。

int myInt;
myInt = GetSomething();

肯定是正确和明确的。但是

int myInt = GetSomething();

更简洁。牢度与此无关。因此,我赞成后者而不是前者。它并不接近。

有一个地方可以将一行划分为组件,可以使调试更容易。

int myInt = GetSomething();
return myInt;
通过调试器而不是

时,

更好

return GetSomething();

因为在后者中我不能轻易地检查返回值,而使用前者我可以。

答案 2 :(得分:1)

我以前从未听说过。如果在第一行设置断点,则执行时调试器会自动将其移动到下一行,因为在第一行上没有任何可调试的内容。

如果人们声称你说的话,我怀疑他们正在考虑这样的场景:

int i = SomeProperty.GetSomeValue().DoSomething();

这里调试起来比较“难”,因为在一行上调用了多个东西。

答案 3 :(得分:0)

谈话的后期,但我听说过那种思想流派。 对单个var没有意义,但它可以作为对大函数的展示。

BIG_FUNCTION = function () {
    // variables
    var isThis = true,        // let me tell you about isThis
        thatThing = 'that',   // thatThing does that thing
        anotherVariable = 0;  // pretend it's specifically named

    // functions
    var doTheThing, // here's where I tell you what to expect
        doFooBar,   // and I'll explain each one
        doBlargo;   // so that you can get a feel for the big function 

    /* Function Definitions */
    doTheThing = function(the) {
       // ... etc
    };
})();