无法修改“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] 返回的是什么呢??
...全文
818 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个问题吧
内容概要:本文档系统整合了基于MATLAB/Simulink的风力涡轮机雷达信号仿真、电力系统优化、新能源调控及多领域智能算法应用资源,涵盖风电功率平抑、混合储能协同调频、综合能源系统调度、无人机三维路径规划、电动汽车参与调度、电氢氨耦合系统优化等前沿科研方向。资源包提供大量可复现的Matlab代码、Simulink仿真模型、数据集及配套论文,涉及GWO、PSO、WOA、HHO等多种智能优化算法,以及LSTM、CNN、GRU等深度学习模型在负荷预测、故障诊断、信号处理中的应用,尤其聚焦于风电与雷达信号交互、储能功率分配、虚拟电厂运行、微电网多时间尺度优化等关键技术的仿真实现。; 适合人群:具备一定MATLAB编程基础,从事电力系统、新能源、智能优化、信号处理、雷达仿真、综合能源管理等相关领域的科研人员及研究生;工作1-3年相关方向的工程师。; 使用场景及目标:①开展风力发电系统与雷达信号交互仿真研究;②复现高水平期刊论文中的优化调度、故障诊断、功率预测模型;③进行无人机路径规划、储能系统设计、综合能源系统优化等课题研究与论文撰写;④借助成熟的代码框架快速搭建仿真模型,提升科研效率与工程实践能力。; 阅读建议:建议按主题分类浏览资源列表,优先选择标注“复现”“顶刊”“EI”等高价值项目,结合提供的网盘链接下载完整代码与数据,配合Simulink仿真模型与说明文档进行调试与二次开发,注重算法实现与实际工程问题的深度融合。
日常处理文本内容时,你是否也常常被这些琐碎又烦人的操作消耗大量时间:从网页复制来的文章满是空行和多余空格,要一段段手动清理;从不同渠道收集的文档繁简混杂,格式五花八门,想统一规范却只能逐篇调整;面对数千行的数据,想按行排序、去重、添加行号,却找不到一个趁手的小工具;更别提Base64编解码、URL转义这些开发中高频使用的操作,每次都得打开在线网站反复折腾——这些看似零散的文本处理需求,单独去搜工具费时费力,用Word又杀鸡用牛刀,始终缺少一款能把这些功能聚合在一起、打开即用的桌面工具。而 大飞哥软件自习室——文本批量整理工具 v2.0正是为整合这些高频文本处理需求而生的专业效率工具,它集文件管理、文本清洗、格式转换、查找替换、批量插入、排序打乱、编码解码、实时统计等近三十项实用功能于一身,采用多标签页设计支持同时编辑多个文档,所有操作均支持撤销与重做,让你在写代码、整理素材、编辑文案时再也不用东拼西凑找工具,一个软件搞定全部文本处理需求。 软件的核心功能模块围绕文本处理的完整工作流展开,覆盖了从“粗加工”到“精处理”的各个环节。文本清洗模块提供了行首尾去空格、清除所有空格、删除空行、合并多余空格、去除重复行、清除HTML标签等六项功能,一键将脏乱差的原始文本快速规整为干净可用的素材。文本转换模块则涵盖了繁简互转、标点中英文互转、全半角互转、全部大写/小写/首字母大写等选项,尤其适合需要批量处理多语言或不同格式规范的文本内容。查找替换模块不仅支持普通文本替换,更提供了正则表达式和区分大小写选项,查找、替换、全部替换、选区替换四种模式灵活应对不同场景。批量插入文本模块更是独树一帜——用户可预设两组插入内容,选择插入到当前段首/段尾或所有段首/段尾,四个单选按钮搭配两个输入框,实现八种插入组合,为批量处理结构化文本提供了极大的便利。

7,776

社区成员

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

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