C#对Dictionary的元素进行修改

本文介绍C#中Dictionary的使用方法,特别是如何正确地修改结构体类型的值。文章通过实例展示了如何添加、查找和更新Dictionary中的数据,并强调了C#与C在处理集合时的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考: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的元素对另外变量的赋值,不是引用,而是只赋值,所以对集合值是结构体的字段进行值修改时,就需要获取

此文到这个结构,然后对它其中的相关字段值进行修改,然后再把修改后的结构覆盖到原集合中。

 

章做个记录,多次学习。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值