ConcurrentList.cs 762 B

12345678910111213141516171819202122
  1. namespace MeloongCore;
  2. public class ConcurrentList<T> : SynchronizedCollection<T>, IEnumerable, IEnumerable<T> {
  3. // 构造函数
  4. public ConcurrentList() : base() { }
  5. public ConcurrentList(IEnumerable<T> data) : base(new object(), data) { }
  6. public static implicit operator ConcurrentList<T>(List<T> data) => new(data);
  7. public static implicit operator List<T>(ConcurrentList<T> data) => new(data);
  8. // 对枚举器进行覆写,返回一个临时副本
  9. public new IEnumerator<T> GetEnumerator() {
  10. lock (SyncRoot) {
  11. return Items.ToList().GetEnumerator();
  12. }
  13. }
  14. IEnumerator IEnumerable.GetEnumerator() {
  15. lock (SyncRoot) {
  16. return Items.ToList().GetEnumerator();
  17. }
  18. }
  19. }