C# 无法确定正在设置值的位置

C# 无法确定正在设置值的位置,c#,C#,我正在研究一些欧拉项目的问题,需要一些帮助来理解我找到的解决方案 我的问题是:在SkipWhile方法调用中,X设置在哪里??当我在运行时中断代码并逐步执行到这一点时,我从未看到为其设置值。然而,代码将一直运行。我检查了SkipWhile的定义,也许我不明白调用中传递的参数如何满足3参数方法定义。数学也是一样。Pow-X在哪里设定的 public long FindGreatestPrimeFactor(long factorGreaterThan, long number) {

我正在研究一些欧拉项目的问题,需要一些帮助来理解我找到的解决方案

我的问题是:在SkipWhile方法调用中,X设置在哪里??当我在运行时中断代码并逐步执行到这一点时,我从未看到为其设置值。然而,代码将一直运行。我检查了SkipWhile的定义,也许我不明白调用中传递的参数如何满足3参数方法定义。数学也是一样。Pow-X在哪里设定的

public long FindGreatestPrimeFactor(long factorGreaterThan, long number)
    {
        long upperBound = (long)Math.Ceiling(Math.Sqrt(number));

        // find next factor of number
        long nextFactor = Range(factorGreaterThan + 1, upperBound)
             .SkipWhile(x => number % x > 0).FirstOrDefault();

        // if no other factor was found, then the number must be prime
        if (nextFactor == 0)
        {
            return number;
        }
        else
        {
            // find the multiplicity of the factor
            long multiplicity = Enumerable.Range(1, Int32.MaxValue)
                 .TakeWhile(x => number % (long)Math.Pow(nextFactor, x) == 0)
                 .Last();

            long quotient = number / (long)Math.Pow(nextFactor, multiplicity);

            if (quotient == 1)
            {
                return nextFactor;
            }
            else
            {
                return FindGreatestPrimeFactor(nextFactor, quotient);
            }
        }
    }

    private IEnumerable<long> Range(long first, long last)
    {
        for (long i = first; i <= last; i++)
        {
            yield return i;
        }
    }

SkipWhile从Range方法中检索其输入值x,该方法依次返回从FactorCreateThan+1到上限的数字。不确定作者为什么决定为此编写一个方法,因为这是与Enumerable.Range方法内置的。

SkipWhile从Range方法中检索其输入值x,该方法反过来返回从FactorCreateThan+1到上限的数字。不确定作者为什么决定为此编写一个方法,因为这是与Enumerable.Range方法内置的。

我相信您所说的是:

所有lambda表达式都使用lambda运算符=>,该运算符的读取方式为转到。lambda运算符的左侧指定输入参数(如果有),右侧保存表达式或语句块


在LINQ表达式中,迭代时,每个项都被提供给lambda。在lambda的主体中,如果希望引用该项,则需要为其命名。在本例中,该参数以x结尾。

我相信您所说的是:

所有lambda表达式都使用lambda运算符=>,该运算符的读取方式为转到。lambda运算符的左侧指定输入参数(如果有),右侧保存表达式或语句块


在LINQ表达式中,迭代时,每个项都被提供给lambda。在lambda的主体中,如果希望引用该项,则需要为其命名。在本例中,参数以x结尾。

表达式如下所示:

x => number % x > 0
我们称之为。它们实际上是函数,x是一个参数。SkipWhile接受一个函数,然后使用不同的参数值执行它

以下是lambda表达式作为函数的编写方式:

bool Foobar(long x)
{
    return number % x > 0;
}
在SkipWhile中,我相信调用该函数时,x是列表中的第一项。如果为true,则使用列表中的第二项再次调用函数,依此类推,直到函数返回false


在本例中,SkipWhile请求一个函数,该函数将列表中类型的值转换为bool。Lambda表达式是一种简洁的表达方式。

如下所示的表达式:

x => number % x > 0
我们称之为。它们实际上是函数,x是一个参数。SkipWhile接受一个函数,然后使用不同的参数值执行它

以下是lambda表达式作为函数的编写方式:

bool Foobar(long x)
{
    return number % x > 0;
}
在SkipWhile中,我相信调用该函数时,x是列表中的第一项。如果为true,则使用列表中的第二项再次调用函数,依此类推,直到函数返回false


在本例中,SkipWhile请求一个函数,该函数将列表中类型的值转换为bool。Lambda表达式是一种简洁的表达方式。

那么,该行中X的值究竟是多少?当我这样读它时,我想我在概念上被卡住了:X被设置为数字,那么X mod本身必须大于0。@user178471-Range返回一个长的列表。迭代列表时,每次向lambda提供一个long,以供=>右侧的函数处理。@user178471-可能有助于理解lambda是什么。因此,当我在可枚举的.NET命名空间中查看SkipWhile的定义时,我发现的是:public static IEnumerable SkipWhilethis IEnumerable source,Func谓词;X是否满足源,而数字%X>0是否满足谓词?我现在要通读你给我的关于lamdas和委托的链接。@user178471-不是IEnumerable之前的this关键字-表示通用IEnumerable接口上的。重要的一点是Func,它是一个委托,在本例中,它接受泛型类型TSource long并返回bool。这是委托思考匿名函数,它在列表中的每个项上执行。那么,在该行中,X的值究竟是多少?当我这样读它时,我想我在概念上被卡住了:X被设置为数字,那么X mod本身必须大于0。@user178471-Range返回一个长的列表。当您在列表上迭代时,一次向lambda提供一个long,由=>右侧的函数处理。@user178471-可能有助于理解lambda是什么。因此,当我在Enumerable.NE中查看SkipWhile的定义时,Oded 这里是我发现的:公共静态IEnumerable SkipWhilethis IEnumerable源,Func谓词;X是否满足源,而数字%X>0是否满足谓词?我现在要通读你给我的关于lamdas和委托的链接。@user178471-不是IEnumerable之前的this关键字-表示通用IEnumerable接口上的。重要的一点是Func,它是一个委托,在本例中,它接受泛型类型TSource long并返回bool。这就是委托思考匿名函数,它在列表中的每个项上执行。内置的EnumerableRange与int一起工作,不长-也许这就是原因。内置的EnumerableRange与int一起工作,不长-也许这就是原因。