繁体   English   中英

无法在VS2008中进入谓词

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM