类的只读集合------防止外界调用clear,add方法修改集合
注意给代码加锁~~~~
class ReadData
{
//既然不能修改,那么在类内部怎么办呢? 类内部使用集合
//让属性的 get方法 返回该集合;
private List<InvenceData> listRead = new List<InvenceData>();
// 这里是对外访问的,不希望外界调用clear,add方法修改这个类内部的集合
// 所以,把类型设置为 IEnumerable ,这样保证他只能调用读取,而无法修改
public IEnumerable<InvenceData> ListRead => listRead;
public void Stop()
{
//停止时清空数据,这个操作应该封装在Stop方法里,外界不关心你什么时候清空的
//外界调用着,根本就不应该知道你使用了可修改的集合 List<InvenceData> listRead
//因为外界使用者,只是访问数据!!!!!
this.listRead.Clear();
//其他逻辑
}
private void Reader_TagsReported(Reader reader, TagReport report)
{
//这里必须上锁,因为在向集合中添加数据时,可能会调用Stop方法,清空集合。
//如果集合被清空,会提示:集合已经被 修改,无法执行循环操作
Monitor.Enter(this.listRead);
foreach (var item in listRead)
{
foreach (var temp in report.Tags)
{
if (item.Epc == temp.Epc.ToHexString())
{
item.FirstSeenTime = temp.FirstSeenTime.LocalDateTime.ToString();
}
}
}
Monitor.Exit(this.listRead);
}
}
class InvenceData
{
public string Tid { get; set; }
public string FirstSeenTime { get; set; }
}