Vâng, bạn có thể làm điều tương tự với Dictionary
, nhưng sẽ sạch hơn khi sử dụng foreach
trong cả trường hợp:
foreach (var entry in dictionary)
{
string key = entry.Key;
int value = entry.Value;
// Use them...
}
này tương đương với:
using (var iterator = dictionary.GetEnumerator())
{
while (iterator.MoveNext())
{
var entry = iterator.Current;
string key = entry.Key;
int value = entry.Value;
// Use them...
}
}
Đó là rất hiếm khi hữu ích để gọi một cách rõ ràng GetEnumerator
và lặp chính mình. Nó thích hợp trong một số ít trường hợp, chẳng hạn như khi bạn muốn xử lý giá trị đầu tiên khác nhau, nhưng nếu bạn định xử lý tất cả các mục nhập theo cách tương tự, hãy sử dụng foreach
.
(Lưu ý rằng nó thực sự là tương đương với sử dụng var
ở đây, nhưng không tương đương với tuyên bố một IEnumerator<KeyValuePair<string, int>>
- nó sẽ thực sự sử dụng lồng nhau Dictionary.Enumerator
struct Đó là một chi tiết mà bạn thường không cần phải lo lắng..)
Nguồn
2012-05-08 12:54:34
vì vậy, cái nào sẽ nhanh hơn? bằng cách sử dụng IEnumerator hoặc foreach (KeyValuePair) bởi vì từ điển của tôi chứa hơn 200000 từ, –
'foreach' gọi' GetEnumerator' và 'MoveNext' trong nội bộ. Vì vậy, điều này sẽ không tạo ra bất kỳ sự khác biệt nào.Ngoài ra các biến thể chung nên được phần nào nhanh hơn, kể từ khi đúc không được yêu cầu nữa. Đặc biệt 'int' không được đóng hộp và unboxed. –