如果我有一个像下面这样的for循环:
foreach(string email in installerEmails.Split(','))
{
Console.WriteLine(email);
}
Run Code Online (Sandbox Code Playgroud)
是否会在循环的每次迭代中调用Split()?在迭代之前,我是否需要将它存储在临时数组中?
Split的结果被评估一次,然后在其上调用GetEnumerator().这将返回一个IEnumerator,在每次迭代中调用MoveNext方法和Current属性.
它基本上相当于:
string[] enumerable=installerEmails.Split(',');
IEnumerator<string> enumerator=enumerable.GetEnumerator();
while(enumerator.MoveNext())
{
string email=(string)enumerator.Current;
Console.WriteLine(email);
}
Run Code Online (Sandbox Code Playgroud)
一个丑陋的细节是对编译器生成的for循环中给出的类型的显式强制转换.这在C#1.0中很有用,其中IEnumerator不是通用的.
我忘记了调查员被处置了.请参阅Jon Hanna对包含处理的代码的回答.
| 归档时间: |
|
| 查看次数: |
4452 次 |
| 最近记录: |