如果我有此代码:
foreach (Char c in myString.ToLowerInvariant())
{ /* code */ }
myString.ToLowerInvariant()
将被呼叫多少次?一次(我假设)还是多次? 最佳答案
简短答案:一次
长答案:
该代码被编译为以下IL。您可以自己编译C#文件,然后在ILDASM(与Visual Studio一起分发)或.NET Reflector(可以显示多种语言的反汇编代码,并提供带有详细说明的IL指令的工具提示)中进行尝试。
L_0008: ldloc.0
L_0009: callvirt instance string [mscorlib]System.String::ToLowerInvariant()
L_000e: stloc.2
L_000f: ldc.i4.0
L_0010: stloc.3
L_0011: br.s L_0021
L_0013: ldloc.2
L_0014: ldloc.3
L_0015: callvirt instance char [mscorlib]System.String::get_Chars(int32)
L_001a: stloc.1
L_001b: nop
L_001c: nop
L_001d: ldloc.3
L_001e: ldc.i4.1
L_001f: add
L_0020: stloc.3
L_0021: ldloc.3
L_0022: ldloc.2
L_0023: callvirt instance int32 [mscorlib]System.String::get_Length()
L_0028: clt
L_002a: stloc.s flag
L_002c: ldloc.s flag
L_002e: brtrue.s L_0013
在L_0021到L_002c行检查实际的循环条件,然后在L_002e行进行跳转,如果尚未处理所有字符,则执行该跳转。请注意,它在ToLowerInvariant调用之后跳至L_0013。
关于c# - C#:foreach主值调用多少次?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1283899/