[英]Unable to step into a predicate in VS2008
class Program
{
static void Main(string[] args)
{
var numbers = new[] {1, -1, -2, 3.5, 1.1, -0.1, 2, 5.7, 8, 9, -10, -2};
Func<double, bool> positiveIntegerSelector = x =>
{
if(x < 0)
return false;
var temp = (int) x;
return temp == x;
};
Func<double, bool> negativeIntegerSelector = x =>
{
if(x >= 0)
return false;
var temp = (int) x;
return temp == x;
};
var positiveIntegers = numbers.Where(positiveIntegerSelector); //unable to step in
var negativeIntegers = numbers.Where(negativeIntegerSelector);
Console.WriteLine(String.Join(",", positiveIntegers.Select(x => x.ToString()).ToArray()));
Console.WriteLine(String.Join("," , negativeIntegers.Select(x => x.ToString()).ToArray()));
}
}
我在这里失踪了什么? (断点除外)
请注意它调试很好,否则除了谓词,我无法介入。
道歉是绝对的傻瓜 - > stepout shift + F11(当谓词被指定为方法组/委托时)
当谓词被指定为lambda表达式x => positiveIntegerSelector(x)时,可以像往常一样工作,然后可以在lambda表达式的谓词上指定break pt
您需要在谓词中放置一个断点来调试它。
你不能直接“插入”(我的机器上的F11 )谓词,因为调用谓词的代码不是你的代码,而是在Enumerable.Where
创建的代码,它将在你迭代后立即执行结果。 在您的情况下,这些是具有String.Join
调用的行。
长话短说:执行这些谓词的是.NET框架代码。
你什么时候想进入谓词? 不要忘记当你调用Where
,那时不执行任何过滤 - 它只是创建一个表示过滤序列的对象。 如果你期望能够在Where
调用中击中F11,那么你当然不会得到你的谓词。
我刚刚在Visual C#Express 2010中尝试了这个,在每个lambda表达式的第一个语句上设置了一个断点,并且在程序的最后两行中运行谓词时它没有遇到任何问题。 我希望VS2008也能如此。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.