关注互联网、IT技术!

C#自定义类实现foreach功能

  •  admin
  •  2011-11-13 11:11:07
  •     
这几天在写一个群发邮件的小软件,基本完工了,再进行细节的优化。 自定义了一个类,用来保存邮件列表,主要是便于多线程处理。在这个类中,声明了一个队列Queue,来保存邮件列表,各个线程发送邮件的时候,就到这个列表中取一个邮件出队。 但是当我想遍历邮件列表时,就比较麻烦了,于是就想能否实现foreach功能,这样遍历就方便了。 网上查 了一下,没想到如此容易。只要继承一个接口IEnumerable,实现public IEnumerator GetEnumerator()这个方法就可以使用foreach语句了。下面是整个类的代码
    public class EmailAddressQueue : IEnumerable
    {
        /// <summary>
        /// 邮件队列
        /// </summary>
        Queue<EmailAddress> _emailQueue = new Queue<EmailAddress>();
        /// <summary>
        /// 线程锁
        /// </summary>
        private static object locker = new object();
        /// <summary>
        /// 入队
        /// </summary>
        /// <param name="item"></param>
        public void Enqueue(EmailAddress item)
        {
            lock (locker)
            {
                _emailQueue.Enqueue(item);
            }
        }
        /// <summary>
        /// 出队
        /// </summary>
        /// <returns></returns>
        public EmailAddress Dequeue()
        {
            lock (locker)
            {
                if (_emailQueue.Count > 0)
                    return _emailQueue.Dequeue();
                return null;
            }
        }
        /// <summary>
        /// 清空
        /// </summary>
        public void Clear()
        {
            lock (locker)
            {
                _emailQueue.Clear();
            }
        }
        /// <summary>
        /// 计数
        /// </summary>
        /// <returns></returns>
        public int Count()
        {
            lock (locker)
            {
                return _emailQueue.Count;
            }
        }
        /// <summary>
        /// 实现GetEnumerator
        /// </summary>
        /// <returns></returns>
        public IEnumerator GetEnumerator()
        {
            return this._emailQueue.GetEnumerator();
        }
    }
这样就可以非常方便的遍历邮件列表了。

相关文章

评论

称呼(可以不填)
Email(可以不填)
链接(可以不填)
请输入评论内容*