参考:https://bbs.youkuaiyun.com/topics/390914212
c# 新手,有些看起来差不多,发现还是需要不断摸索
由于功能需要,就想到用类似c中的map保存一些数据,通过搜索发现应该使用Dictionary来实现这个集合。
首先看了一下别人的代码,发现添加似乎也不难,就用Add(key, value)添加就行了。
定义集合类:
Dictionary<int, alarm_time_info> alarmTimeInfo = new Dictionary<int, alarm_time_info>();
值的结构定义如下:
public class alarm_time_info
{
public int startSec;
public int endSec;
};
操作流程就是先对startSec或者endSec中的一个进行赋值,然后加入到alarmTimeInfo中,后面如果搜索到有对应的key值,就对它的startSec或者endSec进行更新
主要流程如下:
foreach (AlarmInfo info in AlarmInfoList)
{
alarm_time_info ati;
if (!alarmTimeInfo.ContainsKey(info.nID))
{
ati = new alarm_time_info();
ati.startSec = 0;
ati.alarmDev = info;
alarmTimeInfo.Add(info.nID, ati);
}
ati = alarmTimeInfo[info.nID]; // 位置1
int sec = GetSecond(info.curTime);
if (info.cmdType == 0)
ati.endSec = secdAlarm;
else
ati.startSec = secdAlarm;
// 这里必需要这样写了,因为位置1的赋值,不是引用,所以对ati值的修改,不会直接反映到集合中
alarmTimeInfo[info.nID] = ati;
}
这里对它值的修改,不能使用这样的结构:
alarmTimeInfo[info.nID].startSec = sec;
这样写会报 alarmTimeInfo[info.nID].startSec 不是一个变量,无法赋值的错误,这里和c中的map有区别,需要特别注意。
总结:
c#的Dictionary的元素对另外变量的赋值,不是引用,而是只赋值,所以对集合值是结构体的字段进行值修改时,就需要获取
此文到这个结构,然后对它其中的相关字段值进行修改,然后再把修改后的结构覆盖到原集合中。
章做个记录,多次学习。