首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我不能在for循环中更改linq IEnumerable中的元素?

在 C# 中,IEnumerable 是一个表示可枚举的集合的接口,它允许按顺序访问集合中的每个元素。IEnumerable 集合是只读的,因此不能直接修改其中的元素。

当你在 for 循环中尝试更改 IEnumerable 中的元素时,实际上是在尝试直接修改只读集合,这是不允许的。

如果你需要在 for 循环中更改 IEnumerable 中的元素,可以先将其转换为一个可修改的集合类型,如 List<T>。以下是一个示例:

代码语言:csharp
复制
IEnumerable<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
List<int> mutableNumbers = numbers.ToList();

for (int i = 0; i< mutableNumbers.Count; i++)
{
    mutableNumbers[i] = mutableNumbers[i] * 2;
}

numbers = mutableNumbers;

在这个示例中,我们首先将 IEnumerable 转换为 List<T>,然后在 for 循环中修改其中的元素。最后,我们将修改后的 List<T> 重新赋值给原始的 IEnumerable 变量。

需要注意的是,在使用 List<T> 时,请确保在循环中正确处理索引范围,以避免出现索引越界的错误。

推荐的腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

走进 LINQ 世界

大家好,又见面了,是你们朋友全栈君。...目前需要注意是,在 LINQ , 查询变量本身执行任何操作并且不返回任何数据。 它只是存储在以后某个时刻执行查询时为生成结果而必需信息。...这一功能在 select 子句中实现。...四、LINQ 查询操作类型关系 LINQ 查询操作在数据源、查询本身及查询执行是强类型。查询变量类型必须与数据源中元素类型和 foreach 语句中迭代变量类型兼容。...③因为查询变量类型是隐式,所以 foreach 循环中迭代变量也必须是隐式。 4.3 让编译器推断类型信息   您也可以使用关键字 var,可用于查询操作任何局部变量。

4.6K30

C#规范整理·集合和Linq

简单类型必须是一个非空初始值,复杂类型则是一个以new开头初始化项; 匿名类型属性是只读,没有属性设置器,它一旦被初始化就不可更改; 如果两个匿名类型属性值相同,那么就认为两个匿名类型相等; 匿名类型可以在循环中用作初始化器...13.区别LINQ查询IEnumerable<T>和IQueryable<T># LINQ查询方法一共提供了两类扩展方法,在System.Linq命名空间下,有两个静态类:Enumerable类,它针对继承了...稍加观察我们会发现,接口IQueryable<T>实际也是继承了IEnumerable<T>接口,所以,致使这两个接口方法在很大程度上是一致。那么,微软为什么要设计出两套扩展方法呢?...我们知道,LINQ查询从功能上来讲实际上可分为三类:LINQ to OBJECTS、LINQ to SQL、LINQ to XML(本建议讨论)。...LINQ to SQL引擎最终会将表达式树转化成为相应SQL语句,然后在数据库执行。 那么,到底什么时候使用IQueryable<T>,什么时候使用IEnumerable<T>呢?

20530
  • 【深入浅出C#】章节 9: C#高级主题:LINQ查询和表达式

    3.2 如何创建和准备LINQ查询数据源 创建和准备LINQ查询数据源涉及从各种数据类型获取数据,然后将其转换为适用于LINQ数据类型,例如IEnumerable、IQueryable等。...IEnumerable result = collection.Distinct(); Take / Skip:返回指定数量前N个元素或跳过前N个元素元素序列。...匿名类型属性名是从查询结果属性名推断出来。然后我们在foreach循环中遍历查询结果并输出。 注意以下关键点: 匿名类型类型名是由编译器生成,并且在编译时是不可见。...以下是一些常见LINQ查询处理集合类型示例: 过滤数据(Where): 使用 Where 操作符来过滤集合元素,只保留满足条件元素。...下面将分别介绍一下 Entity Framework 和 LINQ to SQL 基本用法。

    2.1K61

    .NET深入解析LINQ框架(四:IQueryable、IQueryProvider接口详解)

    LINQ支撑原理进行了大片理论介绍,不知道效果如何; 在结束上一篇文章时候,看到一个前辈评论说建议多写写LINQ使用方面的,而不是讲这些理论。...比如你在开发一个关于数据密集性框架,可能不是实时持久化,但是能在外部提供某种查询工具来查询内存数据,所以这个时候需要我们能扩展LINQObject查询能力。...只有这样才能真正让这种技术深入人心,才能在实际系统开发当中去灵活运用。 下面我们来构建一个简单IEnumerable扩展方法,用来处理当前集合数据是否可以进行数据插入操作。...顺着数字序号理解,IEnumerableLinq to Object数据源,而Enumerable静态类是专门用来扩展Linq查询表达式查询方法,所以当我们编写Linq查询IEnumerable...3.3】.分段执行IQueryable子方法(Queryable扩展方法) 都知道Linq查询是将一些关键字拼接起来,行成连续查询语义,这其中背后原理文章上上下下也说过很多遍,想也应该大致了解了

    1.5K11

    C#3.0新增功能09 LINQ 基础04 基本 LINQ 查询操作

    本篇介绍 LINQ 查询表达式和一些在查询执行典型操作。 获取数据源 在 LINQ 查询,第一步是指定数据源。 和大多数编程语言相同,在使用 C# 时也必须先声明变量,然后才能使用它。...select cust; 范围变量就像 foreach 循环中迭代变量,但查询表达式不会真正发生迭代。...列表每个元素都是具有 Key成员对象,列表元素根据该键被分组。 在循环访问生成组序列查询时,必须使用嵌套 foreach 循环。 外层循环循环访问每个组,内层循环循环访问每个组成员。...,不必像在 SQL 那样频繁使用 join,因为 LINQ 外键在对象模型中表示为包含项集合属性。...当 select 子句生成除源元素副本以外内容时,该操作称为投影 。 使用投影转换数据是 LINQ 查询表达式一种强大功能。

    3.5K20

    Unity性能调优手册10C#优化:GC,对象池,forforeach,string,LINQ

    此外,一些LINQ方法针对调用者类型进行了优化,因此GC大小。根据调用者类型分配更改。...许多LINQ方法接受IEnumerable并返回IEnumerable,这个API设计允许使用方法链进行直观描述。方法返回实体IEnumerable是每个函数类实例。...用stackalloc分配数组是栈专用,不能保存在类或结构字段。它们必须用作局部变量 即使数组是在栈上分配,分配具有大量元素数组也需要一定处理时间。...如果您希望在应该避免堆分配地方(例如在更新循环中)使用具有大量元素数组,那么最好在初始化期间提前分配数组,或者准备一个像对象池这样数据结构,并以一种可以在使用时出租方式实现它。..., 在IL2CPP,在代码生成期间执行特别的内联优化。

    1.3K11

    金三银四面试:C#.NET面试题中高级篇5-Linq和EF

    3.为什么用EF而不用原生ADO.NET? 4.如何提高LINQ性能问题? 5.什么是IEnumerable? 6.IEnumerable缺点有哪些?...8.LINQ可视化工具简单介绍一下? 9.LINQ to Object和LINQ to SQL有何区别? 10.除了EF,列举出你知道ORM框架? 11.在哪些类型额项目中你会选择EF? 为什么?...Enumerable这个静态类型含有很多扩展方法,其扩展目标是IEnumerable。 实现了这个接口类可以使用Foreach关键字进行迭代(迭代意思是对于一个集合,可以逐一取出元素并遍历之)。...大部分LINQ语句是在最终结果第一个元素被访问时候(即在foreach调用MoveNext方法)才真正开始运算,这个特点称为延迟执行。...LINQ to Object数据源总是实现IEnumerable(所以不如叫做LINQ to IEnumerable),相对LINQ to SQL数据源总是实现IQueryable并使用Queryable

    4.1K30

    C#3.0新增功能09 LINQ 标准查询运算符 04 运算

    集运算是指根据相同或不同集合(或集)是否存在等效元素来生成结果集查询运算。...通过使用投影,您可以构造从每个对象生成新类型。 可以投影属性,并对该属性执行数学函数。 还可以在更改原始对象情况下投影该对象。 下面一节列出了执行投影标准查询运算符方法。...下图显示对字符序列进行三种不同分区操作结果。 第一个操作返回序列前三个元素。 第二个操作跳过前三个元素,返回剩余元素。 第三个操作跳过序列前两个元素,返回接下来三个元素。 ?...:执行分组联接 如何:执行内部联接 如何:执行左外部联接 如何:从多个源填充对象集合 (LINQ) (C#) 08 数据分组 分组是指将数据分到不同组,使每组元素拥有公共属性。...方法 下表列出了执行数据类型转换标准查询运算符方法。 本表名称以“As”开头转换方法可更改源集合静态类型,但不对其进行枚举。 名称以“To”开头方法可枚举源集合,并将项放入相应集合类型。

    9.7K20

    C#3.0新增功能09 LINQ 基础06 LINQ 查询操作类型关系

    若要有效编写查询,应了解完整查询操作变量类型是如何全部彼此关联。 如果了解这些关系,就能够更容易地理解文档 LINQ 示例和代码示例。...另外,还能了解在使用 var 隐式对变量进行类型化时后台操作。 LINQ 查询操作在数据源、查询本身及查询执行是强类型化。...查询变量类型必须与数据源中元素类型和 foreach 语句中迭代变量类型兼容。 此强类型保证在编译时捕获类型错误,以便可以在用户遇到这些错误之前更正它们。...最后一个示例演示在利用使用 var 隐式类型时,如何应用相同原则。 转换源数据查询 下图演示不对数据执行转换 LINQ to Objects 查询操作。...因为查询变量类型是隐式,所以 foreach 循环中迭代变量也必须是隐式。 让编译器推断类型信息 虽然需要了解查询操作类型关系,但是也可以选择让编译器执行全部工作。

    98210

    C#3.0新增功能07 查询表达式

    例如在 LINQ to XML ,源数据显示为 IEnumerable。 对于此源序列,查询可能会执行三种操作之一: 检索元素子集以生成新序列,而不修改各个元素。...还可以使用 into 关键字,使 join 或 group 子句结果可以充当相同查询表达式其他查询子句源。 查询变量 在 LINQ ,查询变量是存储查询而不是查询结果任何变量。...,请参阅 LINQ 查询语法和方法语法。...join 子句 使用 join 子句可基于每个元素中指定键之间相等比较,将一个数据源元素与另一个数据源元素进行关联和/或合并。...在 LINQ ,联接操作是对元素属于不同类型对象序列执行。 联接了两个序列之后,必须使用 select 或 group 语句指定要存储在输出序列元素

    2.1K10

    编写高质量代码改善C#程序157个建议

    本文主要学习记录以下内容:   建议29、区别LINQ查询IEnumerable和IQueryable   建议30、使用LINQ取代集合比较器和迭代器   建议31、在LINQ查询避免不必要迭代...建议29、区别LINQ查询IEnumerable和IQueryable   LINQ查询方法一共提供了两类扩展方法,在System.Linq命名空间下,有两个静态类:     Enumerable...LINQ to SQL引擎最终会将表达式树转化成为相应SQL语句,然后在数据库执行。   那么到底什么时候使用IQueryable,什么时候使用IEnumerable呢?...再来看下面的例子,虽然LINQ查询最后结果都是返回包含了两个元素"Niki"对象,但是实际上,使用Take方法仅仅为我们迭代了2次,而使用where查询方式带来的确实整个集合迭代,首先修改一下集合类元素...——在那里可以取得行李? 2、I can'find my baggage.——找不到我行李。

    95650

    C# 基础知识系列-7 Linq详解

    前言 在上一篇简单介绍了Linq入门级用法,这一篇尝试讲解一些更加深入使用方法,与前一篇结构不一样地方是,这一篇我会先介绍Linq支持方法,然后以实际需求为引导,分别以方法链形式和类SQL...理解就是,自己 定义一个数据源单个对象转换器,然后按照自己方式对数据进行处理,选择出一部分字段,转换一部分字段。 所以按理解,没找到java8同效果方法。...TInner 第二个序列元素类型。 TKey 选择器函数返回类型。 TResult 结果元素类型。 参数 outer IEnumerable 要联接第一个序列。...TInner 第二个序列元素类型。 TKey 键选择器函数返回类型。 TResult 结果元素类型。 参数 outer IEnumerable 要联接第一个序列。...resultSelector Func 用于从第一个序列元素和第二个序列匹配元素集合创建结果元素函数。

    2.4K50

    C#3.0新增功能09 LINQ 基础02 LINQ 查询简介

    LINQ ,查询执行与查询本身截然不同;换句话说,如果只是创建查询变量,则不会检索任何数据。 ? 数据源 上例,数据源是一个数组,因此它隐式支持泛型 IEnumerable 接口。...下例,Customers 表示数据库特定表,而查询结果类型 IQueryable 派生自 IEnumerable。...(如果熟悉 SQL,会注意到这些子句顺序与 SQL 顺序相反。)from 子句指定数据源,where 子句应用筛选器,select 子句指定返回元素类型。...LINQ 查询表达式一节详细讨论了这些子句和其他查询子句。 目前需要注意是,在 LINQ ,查询变量本身执行任何操作并且不返回任何数据。...强制立即执行 对一系列源元素执行聚合函数查询必须首先循环访问这些元素。 Count、Max、Average 和 First 就属于此类查询。

    3.5K30

    .NET面试题系列 - IEnumerable

    后面因为已经没有新元素了,yield也就不执行了,整个Foreach循环将什么都不做。 yield延迟执行特性 – 本质上是一个状态机 关键字yield只有当真正需要迭代并取到元素时才会执行。...return result; case 3: this.1__state = -1; break; 这也就解释了为什么第一个打印出来句子在主函数...不过认为Artech大大分析不是很好,给出自己解释。...从编译后代码我们发现,只要我们通过foreach迭代一个IEnumerable,我们就会跑到GetVectors方法,而每次运行GetVectors方法,yield都只会返回全新三个值为(1,1)...在迭代过程改变集合状态 foreach迭代时不能直接更改集合成员值,但如果集合成员是类或者结构,则可以更改其属性或字段值。不能在为集合删除或者增加成员,这会出现运行时异常。

    64720

    Entity Framework 一些性能建议

    所以每次LINQ查询,都会使用SQL Profiler看一下实际生成SQL语句,以便发现潜在性能问题。也强烈建议大家这么去做,以免日后软件大了出了问题很难查。 ?.... // 建立查询,但不执行 var result = query.ToList(); // 立即执行查询 所以,你应当尽量避免从ToList()后结果再去查找自己想要元素。 ?...IQueryable, IEnumerable 在这两个接口选择上,偏向使用IQueryable。...很显然,它会被系统其他方法调用,而这些调用者希望得到结果都各不相同。...然而下面这个看似很自然写法却会导致希望结果: context.Category.FirstOrDefault(p => p.Name == categoryName).Posts.Count; 这是博客里用来统计某分类下文章数目的语句

    1.7K30

    yield在WCF错误使用——99%开发人员都有可能犯错误

    也就是说,一旦我们在一个返回类型为IEnumerable或者IEnumerable方式通过yield return返回集合元素,意味着这个定义在方法操作会被“延后执行”——操作真正执行不是发生在方法调用时候...,实际上并没有这回事,这与LINQ延迟加载更不是一回事。...再次回到《yield在WCF错误使用——99%开发人员都有可能犯错误[上篇]》中提到例子,现在来解释为什么针对如下两段代码,前者抛出异常不能被WCF正常处理,而后者可以。...WCF值得改进地方,但是目前来说为了避免这样问题,推荐将WCF契约接口操作方法返回类型定义成数组,而不是IEnumerable或者IEnumerable(顺便说一下,WCF针对Array...、List以及其他集合类型序列化/反序列化行为是一致),但是个人对IEnumerable或者IEnumerable排斥。

    1.6K90

    .NET面试题系列 - LINQ to Object

    在面试时,大部分面试官都不会让你手写LINQ查询,至少就来说,写写得出LINQJoin并没所谓,反正查了书肯定可以写得出来。但面试官会对你是否理解了LINQ原理很感兴趣。...因为LINQ to Object绝大多数时候都是和IEnumerable以及它派生类打交道,扩展了IEnumerableEnumerable类,赋予IEnumerable强大查询能力...延迟执行 (Lazy Loading) 大部分LINQ语句是在最终结果第一个元素被访问时候(即在foreach调用MoveNext方法)才真正开始运算,这个特点称为延迟执行。...注意所有名字都打印出来了,而全部大写名字,只会打印长度大于3为什么会交替打印?...:一次只会处理每个序列一个元素(在上面的例子中就是处理18次)。

    3.4K20

    LINQ查询操作符 LINQ学习第二篇

    Sum 求集合中元素和 八、集合操作符 LINQ 集合操作符是指根据相同或不同集合(或集)是否存在等效元素来生成结果集查询操作,一共有4种: 方法名 说明 Distinct...十一、元素操作符 元素操作符将从一个序列返回单个指定元素。 1. First First操作将返回序列第一个元素。如果序列包含任何元素,则First方法将引发异常。...FirstOrDefault FirstOrDefault方法将返回序列第一个元素;如果序列包含任何元素,则返回默认值。它也可以像First方法一样传递一个条件。...需要说明是如果序列包含任何元素,返回默认值是个怎样元素。...LastOrDefault LastOrDefault方法将返回序列最后一个元素;如果序列包含任何元素,则返回默认值。使用方法参照FirstOrDefault。 5.

    3.1K50
    领券