无法修改“System.Collections.Generic.List.this[int]”的返回值

猴头 2014-02-11 05:47:32
无法修改“System.Collections.Generic.List<System.Drawing.Rectangle>.this[int]”的返回值,
因为它不是变量

部分源码如下:

private List<RectangleEx> CRectLst = new List<RectangleEx>();
private List<Rectangle> RectLst = new List<Rectangle>();


其中RectangleEx为我自定义的类:

public class RectangleEx
{
private Rectangle rect;

public Rectangle Rect
{
get
{
return this.rect;
}
set
{
this.rect = value;
}
}

public int X
{
get
{
return this.rect.X;
}
set
{
this.rect.X = value;
}
}
public int Y
{
get
{
return this.rect.Y;
}
set
{
this.rect.Y = value;
}
}
public int Width
{
get
{
return this.rect.Width;
}
set
{
this.rect.Width = value;
}
}
public int Height
{
get
{
return this.rect.Height;
}
set
{
this.rect.Height = value;
}
}
public int Left
{
get
{
return this.rect.Left;
}
}
public int Right
{
get
{
return this.rect.Right;
}
}
public int Top
{
get
{
return this.rect.Top;
}
}
public int Bottom
{
get
{
return this.rect.Bottom;
}
}
public Point Location
{
get
{
return this.rect.Location;
}
set
{
this.rect.Location = value;
}
}

public RectangleEx(int x, int y, int width, int height)
{
this.rect = new Rectangle(x, y, width, height);
}

public bool Contains(int x, int y)
{
return this.rect.Contains(x, y);
}

public void Offset(int x, int y)
{
this.rect.Offset(x, y);
}
}


一个方法中这样这样写:

this.rect0 = new RectangleEx(50, 50, 40, 50);

this.RectLst.Add(this.rect0.Rect);
this.RectLst[0].X = 100; //报错,错误1

this.CRectLst.Add(this.rect0);
this.CRectLst[0].X = 1000;//未报错。


错误1
无法修改“System.Collections.Generic.List<System.Drawing.Rectangle>.this[int]”的返回值,因为它不是变量。
而this.CRectLst[0].X = 1000;因为this.rect0为引用类型,就不报错。
为什么呢???


问题2
而且在调用this.RectLst[0].Offset(100,100)的时候,不报错,但是this.RectLst[0]并没有被修改,难道是因为List集合中如果是值类型则会返回一个副本?返回的副本在调用Offset之后就被丢弃了,而原本的this.RectLst[0]没有被修改??

如果是引用类型,则返回一个对象的引用?

就像 String 对象的某些 方法 的 返回值那样??


对于错误1
this.RectLst[0].X 或者说
System.Collections.Generic.List<System.Drawing.Rectangle>.this[int] 返回的是什么呢??
...全文
821 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lonefee 2016-09-21
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/390405046 ,5L有答案
Regan-lin 2014-02-11
  • 打赏
  • 举报
回复
引用 3 楼 yan_hyz 的回复:
[quote=引用 1 楼 u011130289 的回复:] this.RectLst.Add(this.rect0.Rect); this.RectLst[0].X = 100; //报错,错误1 你这里添加的是RectangleEx里面你自己定义的一个Rectangle变量,你要操作的X并不在这个Rectangle定义的变量里,是在RectangleEx这个类里的,你都没有添加到这个RectangleEx类,你如果要看这个返回的是什么值,你可以断点,自己看; 你第2个问题可能就是第一个问题导致而引起的,你改了第一个问题再去看看第2个问题吧
自己定义的RectangleEx只是把系统的Rectangle包装了下,把值类型改装为引用类型了[/quote] 你都没看懂我说什么··· 你上面private List<Rectangle> RectLst = new List<Rectangle>();这里你的泛型是定义Rectangle,你要操作的X是在RectangleEx你自定义的类里面的,你实例化这个RectangleEx这个类,但是你泛型加入的是Rectangle,不是这个RectangleEx这个类,所以这个X你就操作不了,你上面的是整个RectangleEx类型,X在里面当然可以,不信你可以自己改成RectangleEx类型调试下看看
猴头 2014-02-11
  • 打赏
  • 举报
回复
引用 1 楼 u011130289 的回复:
this.RectLst.Add(this.rect0.Rect); this.RectLst[0].X = 100; //报错,错误1 你这里添加的是RectangleEx里面你自己定义的一个Rectangle变量,你要操作的X并不在这个Rectangle定义的变量里,是在RectangleEx这个类里的,你都没有添加到这个RectangleEx类,你如果要看这个返回的是什么值,你可以断点,自己看; 你第2个问题可能就是第一个问题导致而引起的,你改了第一个问题再去看看第2个问题吧
自己定义的RectangleEx只是把系统的Rectangle包装了下,把值类型改装为引用类型了
猴头 2014-02-11
  • 打赏
  • 举报
回复
引用 1 楼 u011130289 的回复:
this.RectLst.Add(this.rect0.Rect); this.RectLst[0].X = 100; //报错,错误1 你这里添加的是RectangleEx里面你自己定义的一个Rectangle变量,你要操作的X并不在这个Rectangle定义的变量里,是在RectangleEx这个类里的,你都没有添加到这个RectangleEx类,你如果要看这个返回的是什么值,你可以断点,自己看; 你第2个问题可能就是第一个问题导致而引起的,你改了第一个问题再去看看第2个问题吧
Rectangle 是系统提供的Struct类型,类型本身包含这些字段的定义,我自己定义的RectangleEx就是仿照系统的Rectangle写的,自己定义的RectangleEx里面的字段在Rectangle中都有啊
Regan-lin 2014-02-11
  • 打赏
  • 举报
回复
this.RectLst.Add(this.rect0.Rect); this.RectLst[0].X = 100; //报错,错误1 你这里添加的是RectangleEx里面你自己定义的一个Rectangle变量,你要操作的X并不在这个Rectangle定义的变量里,是在RectangleEx这个类里的,你都没有添加到这个RectangleEx类,你如果要看这个返回的是什么值,你可以断点,自己看; 你第2个问题可能就是第一个问题导致而引起的,你改了第一个问题再去看看第2个问题吧
这个是完整源码 python实现 大数据 Spark pyspark 可视化大屏+Kafka+FastAPI+Vue3 【深度学习毕业设计】人脸识别 智能门禁系统(深度学习+OpenCV DNN+FastAPI+Vue3) 源码+论文 完整版 数据库Mysql 出入控制是安防体系中的基础环节。长期以来,IC 卡、密码键盘和门禁钥匙在企事业单位中广泛使用,但存在卡片易丢失、密码易泄露、冒用难追溯等问题。尤其在人员流动性较高的园区与写字楼场景中,卡片补办成本高,权限变更往往滞后,管理方难以及时掌握“谁在何时从何处进出”的完整信息。近年来,深度学习推动生物特征识别技术快速落地,人脸识别因采集成本低、通行体验好、可与视频监控联动,成为智能门禁的主流方案之一。 在智慧园区和数字化办公场景中,门禁系统不仅要完成“开门”,还要完成“管人、管设备、管权限、管记录、管告警”的闭环。将人脸识别与后台管理系统结合,能够把身份核验、权限策略和安全事件处理统一到同一平台,提升管理效率与安全水平。对组织管理者而言,系统可以支撑考勤辅助、访客管控与安全审计;对通行者而言,非接触式识别减少了掏卡刷卡的繁琐步骤,也降低了交叉接触风险。因此,研究并实现一套结构清晰、技术路线明确、可演示可扩展的带人脸识别智能门禁系统,具有明确的工程意义与教学价值。 本课题选择 OpenCV DNN、YuNet 与 SFace 作为识别技术路线,结合 Python、FastAPI 与 Vue3 完成系统开发。该方案无需依赖商业闭源 SDK,模型文件体积较小,部署门槛低,适合本科毕业设计在有限硬件条件下完成可运行原型,同时又能体现深度学习在实际工程中的应用方式。与单纯调用云端识别 API 相比,本地化推理更有利于保护人脸生物特征数据,也便于在论文中完整展示算法调用链路与系统设计细节。 从人才培养角度看,本课题横跨软件工程、数据库原

7,776

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧