修改Dictionary或List中结构体struct值的问题

问题:修改Dictionary中结构体struct值的值,如果直接用Dictionary[key].a += XX;(a为结构体中某数值型属性) ,则会报错:

无法修改.Dictionary<int,struct>.this[int]”的返回值,因为它不是变量

如果用一个变量承接Dictionary[key]中的结构体,即struct newStr =Dictionary[key],然后再做出修改:newStr.a += XX,则Dictionary中对应的结构体的值不发生变化。(由此可判断结构体struct属于值传递)

解决思路:struct 与class虽然看上去相似,但是struct 属于值传递而class属于地址传递,故使用上区别很大,所以在使用变量struct newStr =Dictionary[key]承接值并做出修改后还应将变量newStr 赋给字典中相应Dictionary[key]。

解决方法:

struct newStr =Dictionary[key];
newStr.a +=XX;
Dictionary[key] = newStr;

如果想修改存储struct的List中的值,其解决方法是一样的。

时间: 2024-08-13 10:21:51

修改Dictionary或List中结构体struct值的问题的相关文章

C/C++中结构体struct 的使用

结构(struct) 结构是由基本数据类型构成的.并用一个标识符来命名的各种变量的组合. 结构中可以使用不同的数据类型.     1. 结构说明和结构变量定义  在Turbo C中, 结构也是一种数据类型, 可以使用结构变量, 因此,  象其它 类型的变量一样, 在使用结构变量时要先对其定义. 定义结构变量的一般格式为:  struct 结构名 { 类型  变量名; 类型  变量名; ... } 结构变量;  结构名是结构的标识符不是变量名. 类型为第二节中所讲述的五种数据类型(整型.浮点型.字

c#中结构体(struct)和类(class)的区别

一.类与结构的示例比较: 结构示例: public struct Person { string Name; int height; int weight public bool overWeight() { //implement something } } 类示例: public class TestTime { int hours; int minutes; int seconds; public void passtime() { //implementation of behavior

Swift中元组(Tuples),结构体(Struct),枚举(Enums)之间的区别

Swift有许多种存储数据方式,你可以用枚举(enums),元组(tuples),结构体(structs),类(classes),在这篇文章中我们将比较枚举.元组.结构体之间区别,首先从最简单的开始-元组(tuples). 元组(tuple) 元组是多个值组成的复合值类型,例如,你可以定义一个含有整形和字符串的tuple let amout=(100,"EUR") 当你函数需要返回多个值时,元组这个时候非常有用,你可以使用下标方式来访问元组中的值,如.0,.1以此类推,如下: let

内核中用于数据接收的结构体struct msghdr(转)

内核中用于数据接收的结构体struct msghdr(转) 我们从一个实际的数据包发送的例子入手,来看看其发送的具体流程,以及过程中涉及到的相关数据结构.在我们的虚拟机上发送icmp回显请求包,ping另一台主机172.16.48.1.我们使用系统调用sendto发送这个icmp包. ssize_t sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen);

C# 结构体 struct

C# 结构体 struct C#中结构类型和类类型在语法上非常相似,他们都是一种数据结构,都可以包括数据成员和方法成员. 结构和类的区别: 1.结构是值类型,它在栈中分配空间:而类是引用类型,它在堆中分配空间,栈中保存的只是引用. 2.结构类型直接存储成员数据,让其他类的数据位于对中,位于栈中的变量保存的是指向堆中数据对象的引用. C#中的简单类型,如int.double.bool等都是结构类型.如果需要的话,甚至可以使用结构类型结合运算符运算重载,再为C#语言创建出一种新的值类型来. 由于结构

APUE学习笔记——4.2结构体 struct stat 及其相关函数介绍

以下不少内容来自man手册 结构体struct stat 结构体struct stat用于保存文件相关的所有信息. struct stat的基本成员如下所示 struct stat { dev_t st_dev; // 文件所在设备的设备id,可以分解为主设备号和此设备号 ino_t st_ino; // inode号 mode_t st_mode; // 文件的类型.存取权限等 nlink_t st_nlink; // 文件硬连接数 uid_t st_uid; // 文件拥有者的用户id gi

C++中结构体和类的区别

在C++中,结构体是一种特殊形态的类. 结构体和类的唯一区别就是:  结构体和类具有不同的默认访问控制属性. 类中,对于未指定访问控制属性的成员,其访问控制属性为私有类型(private) 结构体中,对于未指定任何访问控制属性的成员,其访问控制属性为公有类型(public) C++中,不使用结构体丝毫不会影响程序的表达能力.C++之所以要引入结构体,是为了保持和C程序的兼容性. 但有时仍会在C++中使用结构体,是因为,可以使用结构体将不同类型数据组成整体,方便于保存数据.(若用类来保存,因类中成

C语言结构体-struct

知识点: 1)结构体的定义. 2)结构体的sizeof. 3)  结构体的指针. 1) 结构体的定义: 在逻辑上有一定关联的多个数据类型做为一整体进行操作的数据结构,它的关键字是struct.下面我将定义一个结构体 struct Student{ char *name; int age; int sid; }; 我用上面定义的结构体Student来定义一个变量. struct Student student; 上面的代码有点烦,其实我可以这样写 struct Student{ char *nam

C语言 - 结构体(struct)比特字段(:) 详细解释

结构体(struct)比特字段(:) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26722511 结构体(struct)能够使用位字段(:), 节省空间, 例如以下面代码, 结构体a中的, 第一个变量x占用1个字符, y占用2个字符, z占用33个字符(越界); 可是sizeof()会自己主动补齐, 如x+y一共占用4个字节, z占用8个字节, 所以结构体占用12个字节; 当使用加法运算时, 会初始化为0; 代码