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