C#中 字典包含的结构体的字段值的批改
C#中 字典包含的结构体的字段值的修改
这是我的字典
public Dictionary<int, lineTime> lineList;
这是结构体
public struct lineTime
{
public int arriTime;
public int travelTime; //路段行程时间
}
程序中已经赋过值,需要修改arriTime
arcnode.lineList[LineID].arriTime = arrivalTime;
直接赋值报错,求大牛解释一下。
字典的value可以修改,结构体的字段也可以修改,为什么这个不能直接改?
------解决思路----------------------
因为结构体是值类型,如果是类,可以这样改
------解决思路----------------------
字典的value不是‘结构体的字段’,它实际上是一个方法的返回值。
结构是值类型,返回的是值的一个拷贝(副本),在副本进行修改时没有意义的。
你可以整体赋值:
var s = arcnode.lineList[LineID];
s.arriTime = arrivalTime;
arcnode.lineList[LineID] = s;
------解决思路----------------------
我也发现是这样的
如果是C#已有的类型,就可直接修改
如果是自己定义的结构,就不能直接修改
应该是少了某个接口,但 vs 并没有提示
我都是取出来,修改后再放回去这样做的
这是我的字典
public Dictionary<int, lineTime> lineList;
这是结构体
public struct lineTime
{
public int arriTime;
public int travelTime; //路段行程时间
}
程序中已经赋过值,需要修改arriTime
arcnode.lineList[LineID].arriTime = arrivalTime;
直接赋值报错,求大牛解释一下。
字典的value可以修改,结构体的字段也可以修改,为什么这个不能直接改?
------解决思路----------------------
因为结构体是值类型,如果是类,可以这样改
------解决思路----------------------
字典的value不是‘结构体的字段’,它实际上是一个方法的返回值。
结构是值类型,返回的是值的一个拷贝(副本),在副本进行修改时没有意义的。
你可以整体赋值:
var s = arcnode.lineList[LineID];
s.arriTime = arrivalTime;
arcnode.lineList[LineID] = s;
------解决思路----------------------
我也发现是这样的
如果是C#已有的类型,就可直接修改
如果是自己定义的结构,就不能直接修改
应该是少了某个接口,但 vs 并没有提示
我都是取出来,修改后再放回去这样做的