通过列表和数组中的索引获取结构体项目

2023-11-22

当我使用数组时structs(例如 System.Drawing.Point),我可以通过索引获取项目并更改它。

例如(此代码工作正常):

Point[] points = new Point[] { new Point(0,0), new Point(1,1), new Point(2,2) };
for (int i = 0; i < points.Length; i++)
{
    points[i].X += 1;
}

但是当我使用 List 时它不起作用:

无法修改返回值 'System.Collections.Generic.List.this[int]' 因为它不是变量

示例(此代码无法正常工作):

List<Point> points = new List<Point>  { new Point(0,0), new Point(1,1), new Point(2,2) };
for (int i = 0; i < points.Count; i++)
{
    points[i].X += 1;
}

我知道当我按索引获取列表项时,我得到了它的副本,并且编译器提示我没有犯错误,但为什么采用数组索引的元素的工作方式不同?


这是因为对于array points[i] shows where对象已定位。换句话说,基本上points[i]对于一个数组来说是一个pointer在记忆中。您因此执行操作记录在案的在内存中,而不是在某些副本上。

情况并非如此List<T>:它在内部使用数组,但通过方法进行通信,导致这些方法将从内部数组中复制值,并且显然修改这些副本没有多大意义:您会立即忘记它们,因为您没有编写复制回内部数组。

正如编译器建议的那样,解决此问题的一种方法是:

(3,11): error CS1612: Cannot modify a value type return value of `System.Collections.Generic.List<Point>.this[int]'. Consider storing the value in a temporary variable

所以你可以使用以下“trick":

List<Point> points = new List<Point>  { new Point(0,0), new Point(1,1), new Point(2,2) };
for (int i = 0; i < points.Count; i++) {
    Point p = points[i];
    p.X += 1;
    points[i] = p;
}

因此,您将副本读入临时变量,修改副本,然后将其写回List<T>.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过列表和数组中的索引获取结构体项目 的相关文章

  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • 在 NumPy 中获取 ndarray 的索引和值

    我有一个 ndarrayA任意维数N 我想创建一个数组B元组 数组或列表 其中第一个N每个元组中的元素是索引 最后一个元素是该索引的值A 例如 A array 1 2 3 4 5 6 Then B 0 0 1 0 1 2 0 2 3 1 0
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • 从 pygame 获取 numpy 数组

    我想通过 python 访问我的网络摄像头 不幸的是 由于网络摄像头的原因 openCV 无法工作 Pygame camera 使用以下代码就像魅力一样 from pygame import camera display camera in
  • Fortran 子例程返回错误值

    嘿 我正在开发一个 Fortran 程序 遇到了一个奇怪的问题 当我尝试在调用特定子例程之前直接输出数组的某些值时 我得到了正确的值 然后 我尝试在启动子例程时输出同一数组的一些值 它们都是 0 我最终在子例程之后输出数组的值 并且这些值回
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • 确定 Rails 中某个方法所属的类

    Ap Application routes draw do resources accounts end 我想知道 resources 方法所属的类或模块 如果我在中搜索 资源 方法http apidock com rails 在提供的搜索
  • map.setCenter() 函数无法正常工作

    这是代码
  • 处理作曲家废弃包的最佳实践是什么?

    当我运行作曲家更新时 我偶尔会收到软件包已被放弃的消息 我应该使用不同的软件包 例如Package webflo drupal core require dev is abandoned you should avoid using it
  • 上传文件在更新面板中不起作用

    我不想刷新或回发我的页面 所以我尝试在 updatepanel 中上传文件 但单击上传按钮时验证检查显示没有文件 我的html代码是
  • C++14 变量模板:它们的用途是什么?有使用示例吗?

    C 14 将允许创建模板化变量 通常的例子是变量 pi 可以读取它来获取各种类型的数学常数 的值 3 表示int 最接近的值可能是float etc 除此之外 我们只需将变量包装在模板化结构或类中即可获得此功能 这如何与类型转换混合 我看到
  • 如何从 woocommerce 获取商品的库存数量?

    我在正确显示库存数量时遇到了一些问题 这是循环 span class price PREIS span class amount span span
  • 如何追踪内存峰值? (这是带有 p 的峰值,而不是带有 l 的峰值。)

    我有一个信息亭应用程序 它本质上显示了一堆幻灯片 其中包含各种信息 我最初是在一年前开始编写这个代码的 当时我刚开始从事 Objective C 和 iOS 开发 我发现我的代码风格现在比以前干净多了 而且我的经验也丰富了 所以我决定从头开
  • Angular2 传递函数作为组件输入不起作用

    我有一个以函数作为输入的组件 我已经从父级传递了这个函数 尽管调用了该函数 但该函数无法访问声明该函数的实例的依赖项 这是组件 Component selector custom element template val export cl
  • WCF ChannelFactory 与生成代理

    只是想知道当您可以使用 ChannelFactory 调用时 在什么情况下您更愿意从 WCF 服务生成代理 这样你就不必生成代理并担心服务器更新时重新生成代理了 Thanks 创建 WCF 客户端有 3 种基本方法 让 Visual Stu
  • 限制ManyToManyField的最大选择

    我试图限制模型记录在 ManyToManyField 中可以拥有的最大选择数量 在此示例中 有一个可以与区域相关的博客站点 在此示例中 我想将博客站点限制为只能有 3 个区域 这似乎是以前被问过 回答过的问题 但经过几个小时的探索后 我还没
  • Helm 图表之间的依赖关系是否应该反映微服务之间的依赖关系?

    给定以下服务方案及其依赖项 我想设计一组 Helm 图表 API Gateway calls Service A and Service C Service A calls Service B Service B calls Databas
  • ASP.NET Identity 2.0:如何重新哈希密码

    我正在 ASP NET 5 0 Web 应用程序中将用户从旧用户存储迁移到 ASP NET Identity 2 0 我有一种验证旧哈希值的方法 但我想在登录时将它们升级到 ASP NET Identity 2 0 哈希值 我创建了一个自定
  • 使用 MemoryStream 写入 XML

    我注意到有两种不同的方法将数据写入 XML 文件 为简洁起见 省略了错误处理 第一种方法是构建 XML 文档 然后将 XML 保存到文件中 using XmlWriter writer XmlWriter Create fileName w
  • 如何在makefile配方中设置环境变量?

    这是一个简化的 Makefile all for i 0 i lt 5 i do var var i echo var done echo var 我认为 var 的值是 0 1 2 3 4 但输出是 0 0 1 0 1 2 0 1 2 3
  • 如何实现CoreData记录的重新排序?

    我在 iPhone 应用程序中使用 CoreData 但 CoreData 不提供允许您对记录重新排序的自动方法 我想过使用另一列来存储订单信息 但是使用连续数字作为排序索引有问题 如果我正在处理大量数据 重新排序记录可能涉及更新排序信息上
  • Play 框架如何运作?

    我喜欢玩 与其他企业 Java 框架相比 它对于开发人员来说使用起来非常简单 但是 它是如何做到的呢 是什么让像 Java 这样的编译语言能够实现编辑 刷新循环 是什么让 Play 按其工作方式工作 Play 使用 Eclipse 编译器在
  • 在 PL/SQL 中打印记录字段

    如何在 PL SQL 中打印记录变量的所有字段 记录变量有很多字段 那么有没有比打印每个字段更好的方法呢 也尝试过动态sql但没有帮助 基于 Ollies 使用 dbms output 构建 但用于动态遍历光标 设置用于测试 create
  • ASP.NET MVC 3 - 在 jquery 对话框中编辑动态添加到模型集合的项目

    我是 MVC 新手 所以我不确定这里最好的方法是什么 我有一个视图模型 其中包含几个像这样的集合 public class MainViewModel public List
  • iPhone Web 应用程序可以使用相机吗?

    我有一个网络应用程序 我想拍照然后将它们上传到服务器 这可以通过网络应用程序完成吗 编辑 现在可以了 请参阅下面的答案 不可以 webapp 无法访问内部设备 尝试使用 PhoneGap 来缩小您的应用程序和内部设备之间的差距 但这将编译一
  • 通过列表和数组中的索引获取结构体项目

    当我使用数组时structs 例如 System Drawing Point 我可以通过索引获取项目并更改它 例如 此代码工作正常 Point points new Point new Point 0 0 new Point 1 1 new