2008-09-18 40 views
5

Tôi có một IList có chứa các mục (phụ huynh đầu tiên), họ cần phải được thêm vào một Tài liệu Sơ đồ theo thứ tự ngược để phụ huynh được thêm vào cuối cùng, được vẽ lên trên để nó là thứ đầu tiên được chọn bởi người dùng.Làm cách nào để lặp lại bộ sưu tập .Net IList theo thứ tự ngược lại?

Cách tốt nhất để làm điều đó là gì? Một cái gì đó tốt hơn/thanh lịch hơn những gì tôi đang làm hiện tại mà tôi đăng bên dưới ..

Trả lời

7

Nếu bạn có .NET 3.5, bạn có thể sử dụng tính năng đảo ngược của LINQ không?

foreach(var item in obEvtArgs.NewItems.Reverse()) 
{ 
    ... 
} 

(Giả sử bạn đang nói về IList generic)

+0

Tôi sắp bỏ cuộc bởi vì tôi không thể tìm thấy không gian tên System.Linq trong intellisense. Tôi đang làm việc với NotifyCollectionChangedEventArgs sử dụng System.Collections.IList .. vì vậy tôi không thể Reverse() anyways..thx. đã bỏ phiếu. – Gishu

+0

bạn luôn có thể sử dụng một (danh sách mới (obEvtArgs.NewItems)) Reverse(), nhưng bạn sẽ nhận được sử dụng bộ nhớ cao hơn và hiệu suất thấp hơn. –

+0

:) Đối với vòng lặp là quen thuộc hơn và có thể đọc được với tôi ít nhất. Cần làm quen với LINQ một trong những ngày này ... – Gishu

0

NewItems là Danh sách của tôi ở đây ... Đây là một chút clunky mặc dù.

for(int iLooper = obEvtArgs.NewItems.Count-1; iLooper >= 0; iLooper--) 
      { 
       GoViewBoy.Document.Add(CreateNodeFor(obEvtArgs.NewItems[iLooper] as IMySpecificObject, obNextPos)); 
      } 
+1

tại sao không bao gồm này trong câu hỏi? Tại sao đăng bài như một câu trả lời? –

+0

Từ Câu hỏi thường gặp: Tôi có thể trả lời câu hỏi của riêng mình không? Điều gì sẽ xảy ra nếu nó không thực sự là một câu hỏi? Tốt nhất là nên gửi câu trả lời, thay vì chỉ trả lời trong câu hỏi. Điều này cho phép câu trả lời được bình chọn và đánh giá công bằng đối với câu trả lời của người khác. – digiguru

2

Căn cứ ý kiến ​​để Davy's answer, và Gishu's original answer, bạn có thể cast của bạn một cách yếu ớt, đánh máy System.Collections.IList đến một bộ sưu tập chung bằng cách sử dụng phương pháp System.Linq.Enumerable.Cast mở rộng:

var reversedCollection = obEvtArgs.NewItems 
    .Cast<IMySpecificObject>() 
    .Reverse(); 

này loại bỏ tiếng ồn của cả for vòng lặp đảo ngược, và as dàn diễn viên để có được một đối tượng mạnh mẽ-gõ từ nguồn gốc al bộ sưu tập.

0

Bạn không cần LINQ:

var reversed = new List<T>(original); // assuming original has type IList<T> 
reversed.Reverse(); 
foreach (T e in reversed) { 
    ... 
} 
Các vấn đề liên quan