C# 函数return是否中断循环,并在内存中处理变量?
如果您正在编写带有返回值的函数,并且在其中一个代码路径上有foreach,“return”是否也执行“break”?这个有点不同,因为它有嵌套的循环 这就是我正在谈论的特定片段。如果符合任何标准,我只想退出:C# 函数return是否中断循环,并在内存中处理变量?,c#,function,foreach,return,break,C#,Function,Foreach,Return,Break,如果您正在编写带有返回值的函数,并且在其中一个代码路径上有foreach,“return”是否也执行“break”?这个有点不同,因为它有嵌套的循环 这就是我正在谈论的特定片段。如果符合任何标准,我只想退出: protected bool SearchMultiples(decimal i) { bool bl = false; foreach (var sl in ht.Values) { foreach (var v in al) {
protected bool SearchMultiples(decimal i)
{
bool bl = false;
foreach (var sl in ht.Values)
{
foreach (var v in al)
{
if (decimal.Parse(v.ToString()) > i)
{
break;
}
else
{
if (v.ToString() == i.ToString())
{
return true;
}
}
}
}
return bl;
}
我做了一些搜索,但没有找到像这样的东西。我能找到的最接近的东西是有人建议使用for循环,但这仍然不能回答问题。我知道该语句将返回代码块中该点出现的任何值,但它是否会在内存中处理其数据并停止运行
为什么这对我很重要?
我第一次尝试多线程。该应用程序是一个质数查找程序。如果大数是较小素数的倍数,则此狙击旨在消除大数。当我找到一个素数时,我只为该素数创建一个新的类型化列表,然后用p=prime(pn1,pn2,p*n3…)填充该列表。
我必须为每个素数创建一个列表,因为我发现在一个键入的列表中不能存储超过2GB的信息。
然后,每个列表作为字典项进入哈希表。
基本算法仍然很初级,但我正在努力添加除法的所有快捷规则以加快运算速度。是的,从方法返回也将退出for循环。编写一个简单的测试来验证……应该相当容易,当您点击一个return语句时,函数会完成,通常情况下,return语句之后的代码不会执行。使用try、catch、finally块时会出现异常,finally块中的代码将始终运行 只是给你一个关于引擎盖下发生了什么的提示。C#被编译为本机代码: 在执行CLI程序集时,其代码将通过运行时的JIT编译器来生成本机代码。也可以使用提前编译,这消除了此步骤,但以可执行文件的可移植性为代价 因此,您的源(条件)被编译为如下内容:
IL_0010: ldloca.s 2
IL_0012: constrained. [mscorlib]System.Int32
IL_0018: callvirt instance string object::ToString()
IL_001d: call valuetype [mscorlib]System.Decimal valuetype [mscorlib]System.Decimal::Parse(string)
IL_0022: ldloc.1
IL_0023: call valuetype [mscorlib]System.Decimal valuetype [mscorlib]System.Decimal::op_Implicit(int32)
IL_0028: call bool valuetype [mscorlib]System.Decimal::op_GreaterThan(valuetype [mscorlib]System.Decimal, valuetype [mscorlib]System.Decimal)
IL_002d: brfalse IL_0037
因此,如果条件失败,程序将转到“else”分支(从IL_0032开始)
IL_0032: br IL_0068
否则它将中断循环->跳到il0068
,这是foreach之后的第一条指令。因此,break只是转到循环之后的第一条指令
IL_0037: ldloca.s 2
IL_0039: constrained. [mscorlib]System.Int32
IL_003f: callvirt instance string object::ToString()
IL_0044: ldloca.s 1
IL_0046: constrained. [mscorlib]System.Int32
IL_004c: callvirt instance string object::ToString()
IL_0051: call bool string::op_Equality(string, string)
IL_0056: brfalse IL_005d
IL_005b: ldc.i4.1
IL_005c: ret
和ldc.i4.1
和ret
一起使返回true
和ret
定义如下:
从方法返回,可能带有值
因此,除非有例如
finally
块仍在等待进程,否则函数将立即返回。那么,您是否尝试观察发生了什么?return
将控制权从当前方法/过程转移到调用者。因此,是的,它也会打破当前方法中对流结构的所有控制。(好吧,除了一个尝试..我想最后是)事实上并非完全正确。例如,如果它在try/finally块中,finally块将在它之后运行。是的,你是正确的。很好的澄清。虽然正确且信息丰富,但在我看来,在这种情况下,简短的答案更好。对于提出如此琐碎问题的人来说,你的答案太多了重申。@Zoharpeld我同意,如果还没有一个简单的答案,我会发布一个简单的…但我的目的是提供额外的(我觉得很有趣)OP和其他人可能感兴趣,也可能不感兴趣的信息。我正在处理的数字超出了.NET framework的设计范围。更不用说处理多个线程了,每个线程都在处理一系列的倍数、除法或平方根,这让我的计算机内存变得相当复杂内存占用如此之快(16GB),我开始怀疑内置内存管理,但我想在这方面获得一些信息。