首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C# 改变器皿里面结构体的值

2012-09-23 
C# 改变容器里面结构体的值ListSendMessage sendingMessages nullif(sendingMessages !null && send

C# 改变容器里面结构体的值

List<SendMessage> sendingMessages = null;

if(sendingMessages !=null && sendingMessages.Count > 0){

// Debug.Log("current in sending msg: " + sendingMessages.Count);

for(int i=0; i<sendingMessages.Count; i++){

// Debug.Log("msg time: " + msg.time.ToString());

SendMessage msg = sendingMessages[i];

msg.time +=Time.deltaTime;  


因为刚做unity没多久,c#是现学现用,上次又遇到一个坑,

SendMessage msg = sendingMessages[i];

msg.time += Time.deltaTime;  

这样代码写完以后我以为list里面对应的值被改变了,结果后来证明是没有变化的,

查资料发现结构体是值类型的,我这样写改变的是一份拷贝,

解决方案有2个:

1, 最后再加上:

sendingMessages[i] = msg;


2,把容器里面结构体改称类



根据c#高级编程里面的说法,

结构体在c#里面是值类型,

SendMessage msg;不是一个引用,已经创建了一份内存,所以结构体可以new,也可以不new

都是用的这一份内存。

 

热点排行