2009-04-08 51 views
6

Giả sử mã tôi sử dụng để lặp thông qua một danh sách nútcho mỗi vòng lặp

foreach(XmlNode nodeP in node.SelectNodes("Property")) 
{ 
    propsList.Add(nodeP.Attributes["name"].Value, true); 
} 

trong trường hợp này không những node.SelectNodes biểu thức ("tài sản"), được đánh giá trong mỗi lần lặp của mỗi hoặc một lần?

+0

Ngôn ngữ này mà bạn đang làm việc với ngôn ngữ nào? –

+0

Tôi đã chỉnh sửa các thẻ bởi vì điều này không liên quan gì đến XML cụ thể - nó chỉ liên quan đến cách vòng lặp foreach hoạt động. Nếu bất kỳ ai không đồng ý, vui lòng hoàn nguyên. –

Trả lời

11

Chỉ một lần. Tuyên bố foreach là cú pháp đường cho (trong trường hợp của bạn) ...

{ 
    IEnumerator<XmlNode> enumerator = node.SelectNodes("Property").GetEnumerator(); 

    XmlNode nodeP; 

    while(enumerator.MoveNext()) 
    { 
     nodeP = enumerator.Current; 

     propsList.Add(nodeP.Attributes["name"].Value, true); 
    } 

    IDisposable disposable = enumerator as IDisposable; 

    if(disposable != null) disposable.Dispose(); 
} 

Vì vậy, cuộc gọi thực tế đến SelectNodes() chỉ xảy ra một lần.

+0

Nó không liên quan đến câu hỏi cụ thể này, nhưng nếu điều tra viên dùng một lần, nó cũng sẽ bị xử lý. –

+0

@Marc: Cảm ơn! Đã chỉnh sửa; Tôi quên mất rằng –

+0

Hi, Trong trường hợp đó, mà mã là tốt hơn trong hai, for (int i = 0; i

4

Dường như bạn đang hỏi về C#/.NET. Các SelectNodes() cuộc gọi sẽ được thực hiện một lần, và sau đó điều tra sẽ được lấy từ giá trị trả về (mà thực hiện IEnumerable). Đó là điều được sử dụng trong vòng lặp, không có cuộc gọi tiếp theo nào đến SelectNodes() là cần thiết.

Các vấn đề liên quan