2010-02-12 35 views
8

Tôi có một từ điển có các thành phần mà tôi cần lặp lại và thực hiện thay đổi. Tôi không thể sử dụng tuyên bố foreach, vì nó đôi khi ném InvalidOperationException, nói rằng bộ sưu tập không thể được sửa đổi trong một enumaration.Phương thức Dictionary.ElementAt hiển thị trong một số lớp, nhưng không hiển thị ở một số lớp khác

Tôi có thể sử dụng vòng lặp for, kết hợp với phương thức Dictionary.ElementAt và tôi đã sử dụng thành công nó trong các lớp khác, nhưng trong lớp này, phương thức ElementAt không thể tìm thấy! Bất kỳ ý tưởng?

+1

Không có ý tưởng về ElementAt, nhưng bạn không thể sao chép các Keys và lặp lại điều đó? –

+0

Bạn có thể cho chúng tôi thấy một ví dụ tối thiểu khi từ điển.ElementAt không được tìm thấy? –

Trả lời

18

ElementAtextension method được xác định trong System.Linq.Enumerable.

Bạn cần phải thêm một điều khoản sử dụng để làm cho nó có thể nhìn thấy:

using System.Linq; 

Lưu ý rằng elementAt trên TKey điển <, TValue > không làm cho rất nhiều ý nghĩa, tuy nhiên, như việc thực hiện từ điển không không đảm bảo các yếu tố theo bất kỳ thứ tự cụ thể nào, cũng không phải là thứ tự không thay đổi nếu bạn thực hiện các thay đổi đối với từ điển.

+0

Và đảm bảo rằng hội đồng của bạn đang nhắm mục tiêu .NET 3.5 (hoặc cao hơn). –

+0

Bạn có thể cung cấp một ví dụ để chứng minh rằng nó là nguy hiểm để dựa vào chỉ mục để truy cập một từ điển? (nghĩa là nơi chỉ mục thay đổi cho một khóa nhất định). –

+0

Dường như từ điển không bảo đảm trật tự. Bạn có thể nhận các phần tử theo các thứ tự khác nhau trong các lần lặp khác nhau thông qua từ điển. –

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