社区
C#
帖子详情
自己实现的集合类,如何防止 foreach中途退出后 当前的location位置不对?
progame
2003-04-25 02:55:56
因为线程被终止,所以foreach并未执行完
结果下次执行前我只能使用CMyClass.Reset()复位才行
有别的方法么?
...全文
56
5
打赏
收藏
自己实现的集合类,如何防止 foreach中途退出后 当前的location位置不对?
因为线程被终止,所以foreach并未执行完 结果下次执行前我只能使用CMyClass.Reset()复位才行 有别的方法么?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
progame
2003-04-25
打赏
举报
回复
o
timmy3310
2003-04-25
打赏
举报
回复
比如:
internal class SomeEnumerator
{
private YourClass _data;
public SomeEunmerator( YourClass obj )
{
_data = obj;
}
public object Current
{
// 得到集合当前的元素
get
{
CFileItem item = (CFileItem)_data.m_Files[this.m_Location - 1];
return (object)item;
}
}
public void Reset()
{
_data.m_Location = 0;
}
public bool MoveNext()
{
_data.m_Location++;
if (_data.m_Location > _data.m_Files.Count)
{
_data.m_Location = 0;
return false;
}
else
return true;
}
}
timmy3310
2003-04-25
打赏
举报
回复
你可以写一个内部类来帮你实现IEnumerator,而在:
public IEnumerator GetEnumerator()
{
return new SomeEnumerator(this); //每次foreach都返回一个新实例
}
然后在SomeEnumerator实现IEnumerator的方法,也就是MoveNext、Reset等,在GetEnumerator里面每次都返回一个实例的话,就不会受到一个foreach没有正常执行完,内部的Localtion会影响下一次了
progame
2003-04-25
打赏
举报
回复
#region 集合实现
public IEnumerator GetEnumerator()
{
return (IEnumerator)this;
}
public object Current
{
// 得到集合当前的元素
get
{
CFileItem item = (CFileItem)this.m_Files[this.m_Location - 1];
return (object)item;
}
}
public void Reset()
{
this.m_Location = 0;
}
public bool MoveNext()
{
this.m_Location++;
if (this.m_Location > this.m_Files.Count)
{
this.m_Location = 0;
return false;
}
else
return true;
}
#endregion
timmy3310
2003-04-25
打赏
举报
回复
把你的类代码贴出来
Java 面试总结
java中的
集合类
有哪些? hashmap和hashtable的区别? list有哪些常用类? ArrayList和LinkedList的区别? 有哪些
实现
多线程的方式? 怎么保证线程的安全性? volatile关键的作用? volatile是怎么保证可见性的? ...
C#
实现
软件自动更新系统实战项目
本章将系统性地介绍C#平台下
实现
自动更新的背景意义、核心目标以及技术挑战。我们将从用户需求出发,剖析传统手动升级方式的局限性,并引出自动化更新机制的优势,包括提升用户体验、增强安全性、降低维护成本等。...
微信小程序背景音乐
实现
与Deno辅助开发实战
微信小程序通过等专属API,提供了独立于页面生命周期的背景音乐播放能力,支持应用在后台持续运行时仍可输出音频,广泛应用于在线教育、冥想类App及小游戏配乐等场景。相较于普通的标签,背景音频机制具备更强的系统...
C#窗体分割功能
实现
与应用实战
对于高度定制化需求,可继承并重写OnPaint方法
实现
完全自定义绘制。但由于原生控件未暴露足够绘图接口,通常建议采用“覆盖层”技术:graph TDA[原始SplitContainer] --> B[添加透明Panel覆盖]B --> C{监听鼠标进入...
codeproject资源集合贴
Applications Crafting a C# forms Editor From scratch ... 建立一个类似C#的环境,
实现
控件拖拉,属性 Packet Capture and Analayzer 网络封包截获 http://www.codep
C#
111,119
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章