2010-09-15 102 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())设置代码中的断点,只需修改执行路径从那里,而不是试图修改返回值的另一种方法,只需修改事务的状态,其中值是使用