C#中struct的2个小问题
来源:互联网 发布:淘宝情报通 编辑:程序博客网 时间:2024/04/30 13:07
1、设置链表,通常代码如下:
public struct Links
{
public int data;
public Links next;
}
上面的代码编译时会出错:“Links”类型的结构成员“Links.next”在结构布局中导致循环
解决方法有2个:
a、不用struct,改用class就ok了
b、坚持使用struct,那么需要折衷一下,加一个object成员和Links属性来曲线救国,代码如下:
public struct Links
{
public int data;
private object _next;
public Links next
{
get { return (Links)_next; }
set { _next = value; }
}
}
2、对struct数组或类的struct成员赋值,示例代码:
List<Links> arr = new List<Links>();
arr.Add(new Links());
arr[0].data = 123;
上面的代码编译时出错:无法修改“System.Collections.Generic.List<Links>.this[int]”的返回值,因为它不是变量
出错的原因,是因为struct是值类型,首先arr[0]返回了一个Links,返回的只是一个副本,并不是arr数组里的0这个位置的引用,
直接对副本的data属性进行修改,是没有任何意义的,因为修改完成后,这个副本就被抛弃了
为了避免开发者犯这个错误,微软就把它定义为编译错误了,具体参考:http://msdn.microsoft.com/zh-cn/library/wydkhw2c(vs.80).aspx
如果是希望修改数组里第0个元素的data属性,代码改成:
List<Links> arr = new List<Links>();
arr.Add(new Links());
Links tmp = arr[0];
tmp.data = 123;
arr[0].data = tmp;
上面这一步是把第0个元素直接整个替换,旧的数据等待回收中
首发:http://beinet.cn
- C#中struct的2个小问题
- C#中使用List<struct>的问题
- vc中容易忽略的2个小问题
- 第一个小问题:forward declaration of struct Ui::
- C#中struct和C中的struct的一个区别
- C#中class与struct的区别
- c#中struct和class的区别
- C#中class与struct的区别
- c#中struct和class的区别
- c#中struct和class的区别
- C#中struct与class的区别
- C#中class与struct的区别
- C#中class与struct的区别
- C#中class与struct的区别
- C# 语言中 struct 的陷阱
- C#中class与struct的区别
- C#中struct和class的区别
- C#中Struct与Class的区别
- DIOCP开源项目-详解编码器和解码器和如何在传输中加入压缩和解压功能
- Uva 10891 sum 游戏 (及其变型) ;动态规划
- 第十四周上机任务项目1-2
- oracle数据库远程连接配置以及ado连接
- Coretx—A8架构处理器框图
- C#中struct的2个小问题
- We7网站群内容管理系统
- 第十四周项目一——Animal类
- 快速排序 (java)
- POJ 1273 Drainage Ditches
- Asp.net C# 获取本周上周本月上月本年上年第一天最后一天时间大全
- windows server 2003 普通用户(users)远程登录立即自动注销的解决方法
- linux 下chattr 用法参数说明
- 第十四周上机任务----动物的叫声