2010-09-15 103 views
1

說我有這個C#方法:修改方法的返回值

public bool GetVal() 
{ 
    return a1 == b1 || c1 == d1 || GetE1() == GetF1(); // Illustrating complicated logic here.. 
} 

我不想修改方法的變量/返回值的內容在上面的語句,但想要返回false到調用GetVal()的方法。

是否有可能使用VS2010調試器以某種方式修改返回值,就像我可以動態修改變量值一樣?也許修改調用堆棧?

+0

爲什麼不在返回完成後修改該值,假設您將其分配給調用位置的變量。 – Lazarus 2010-09-15 15:04:17

+0

關鍵是不要修改任何源代碼,以避免巨大的重新編譯。 – rickythefox 2010-09-15 15:16:49

回答

1

以這種方式不可能直接修改返回值。與C++相比,託管代碼非常有限/不支持查看函數調用的返回值。

但你可以做的是去呼叫站點,並修改分配了函數調用值的變量。

0
public bool GetVal() 
{ 
    bool retval = a1 == b1 || c1 == d1 || GetE1() == GetF1(); 
// edit retval to be 'false' in the debugger now 
    return retval; 
} 
0

我經常發現自己需要同樣的事情,不幸的是做到這一點的唯一方法是創建一個臨時變量,您可以通過當地人改變或函數返回前觀察窗口。

public bool GetVal() 
{ 
    bool b = a1 == b1 || c1 == d1 || GetE1() == GetF1(); 
    return b;//Set breakpoint here 
} 
0
public bool GetVal() 
{ 
    var result = a1 == b1 || c1 == d1 || GetE1() == GetF1(); // Illustrating complicated logic here.. 
    return result; 
} 

在返回行設置斷點並修改結果變量。

0

至於其他的答案指出:

public bool GetVal() 
{ 
    bool result = a1 == b1 || c1 == d1 || GetE1() == GetF1(); 
    return result; 
} 

完美的作品。但是,一般來說,將大量if語句串起來的代碼無論如何都很難讀取和調試。

你應該把你的功能分成幾個步驟,而不是讓它在一行中執行所有的步驟。

來完成你的任務是在if(GetVal())設置代碼中的斷點,只需修改執行路徑從那裏,而不是試圖修改返回值的另一種方法,只需修改事務的狀態,其中值是使用