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

在不知道名称的情况下获取对foreach绑定内集合的引用

,可以通过以下方式实现:

  1. 使用反射:通过反射可以获取到foreach循环中绑定的集合的引用。具体步骤如下:
    • 获取foreach循环所在的方法或类的Type对象。
    • 使用Type对象的GetFields方法获取所有字段。
    • 遍历字段列表,找到类型为IEnumerable的字段。
    • 使用FieldInfo对象的GetValue方法获取字段的值,即绑定的集合的引用。

例如,假设foreach循环所在的方法为TestMethod,代码如下:

代码语言:csharp
复制

using System;

using System.Collections;

public class Program

{

代码语言:txt
复制
   public static void Main()
代码语言:txt
复制
   {
代码语言:txt
复制
       TestMethod();
代码语言:txt
复制
   }
代码语言:txt
复制
   public static void TestMethod()
代码语言:txt
复制
   {
代码语言:txt
复制
       ArrayList list = new ArrayList() { 1, 2, 3, 4, 5 };
代码语言:txt
复制
       foreach (var item in list)
代码语言:txt
复制
       {
代码语言:txt
复制
           // 获取对list集合的引用
代码语言:txt
复制
           Type type = typeof(Program);
代码语言:txt
复制
           FieldInfo[] fields = type.GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
代码语言:txt
复制
           foreach (var field in fields)
代码语言:txt
复制
           {
代码语言:txt
复制
               if (field.FieldType == typeof(IEnumerable))
代码语言:txt
复制
               {
代码语言:txt
复制
                   IEnumerable collection = (IEnumerable)field.GetValue(this);
代码语言:txt
复制
                   Console.WriteLine(collection);
代码语言:txt
复制
               }
代码语言:txt
复制
           }
代码语言:txt
复制
       }
代码语言:txt
复制
   }

}

代码语言:txt
复制
  1. 使用Lambda表达式:通过Lambda表达式可以获取到foreach循环中绑定的集合的引用。具体步骤如下:
    • 使用Lambda表达式获取foreach循环的迭代器。
    • 使用迭代器的GetType方法获取迭代器的类型。
    • 使用迭代器的GetField方法获取迭代器内部的私有字段。
    • 使用字段的GetValue方法获取字段的值,即绑定的集合的引用。

例如,假设foreach循环所在的方法为TestMethod,代码如下:

代码语言:csharp
复制

using System;

using System.Collections;

public class Program

{

代码语言:txt
复制
   public static void Main()
代码语言:txt
复制
   {
代码语言:txt
复制
       TestMethod();
代码语言:txt
复制
   }
代码语言:txt
复制
   public static void TestMethod()
代码语言:txt
复制
   {
代码语言:txt
复制
       ArrayList list = new ArrayList() { 1, 2, 3, 4, 5 };
代码语言:txt
复制
       foreach (var item in list)
代码语言:txt
复制
       {
代码语言:txt
复制
           // 获取对list集合的引用
代码语言:txt
复制
           var iterator = list.GetEnumerator();
代码语言:txt
复制
           Type iteratorType = iterator.GetType();
代码语言:txt
复制
           var field = iteratorType.GetField("list", BindingFlags.NonPublic | BindingFlags.Instance);
代码语言:txt
复制
           var collection = (IEnumerable)field.GetValue(iterator);
代码语言:txt
复制
           Console.WriteLine(collection);
代码语言:txt
复制
       }
代码语言:txt
复制
   }

}

代码语言:txt
复制

以上是在不知道名称的情况下获取对foreach绑定内集合的引用的方法。这些方法可以帮助开发人员在需要操作绑定的集合时获取到集合的引用,从而进行相应的操作。

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

相关·内容

面向 JavaScript 开发人员 ECMAScript 6 指南(2):ECMAScript 6 中函数增强

回想一下,EventEmitter(获取自 events 模块)是一个简单发布-订阅式消息系统:您可以某个特定事件名称发射器上注册回调,当该事件被 “发出” 时,则按注册顺序触发回调。...类似 C 语言中,可以将状态存储 getName 函数静态变量中,但像类似的 Java 和 C# 一样,ECMAScript 不支持函数中使用静态变量。...在这种情况下,我们将使用闭包,以便函数字面量返回后继续绑定到 “当前” 变量,使用该变量存储自己状态。...函数编程中无限流 与名称数组上使用迭代器相比,似乎前面的代码示例没有多大改进。毕竟,这就是迭代器用途:让各个元素能够访问一个集合内容。...这进而引入了一个更有趣想法:调用方可能不知道最初没有集合不知道生成值永无止境。这就是一些语言所称无限流。

69820

WPF:无法元素“XXX”设置 Name 特性值“YYY”。“XXX”元素“ZZZ”范围另一范围内定义它时,已注册了名称

WPF:无法元素“XXX”设置 Name 特性值“YYY”。“XXX”元素“ZZZ”范围另一范围内定义它时,已注册了名称。...“XXX”元素“ZZZ”范围另一范围内定义它时,已注册了名称。 ---- 编译错误 编译时,出现错误: 无法元素“XXX”设置 Name 特性值“YYY”。...“XXX”元素“ZZZ”范围另一范围内定义它时,已注册了名称。 MC3093: Cannot set Name attribute value ‘X’ on element ‘Y’....这里 XXX 是元素类型,YYY 是指定名称值,ZZZ 是父容器名称。...-- 省略 --> 别问我为什么会有以上这样诡异代码。我也不知道,这只是偶然发现代码,我简化后拿到博客中。

3K20

每天10个前端小知识 【Day 8】

变量arr是仅有的这个值引用,因此引用次数为1。...div 没有被回收 refA = null; console.log(refA, 'refA'); // 解除引用 包括使用事件监听addEventListener监听时候,不监听情况下使用removeEventListener...绝大多数情况下,函数调用方式决定了 this 值(运行时绑定)。this 关键字是函数运行时自动生成一个内部对象,只能在函数内部使用,总指向调用它对象。...箭头函数 ES6 语法中还提供了箭头函语法,让我们代码书写时就能确定 this 指向(编译时绑定) 优先级 new绑定优先级 > 显示绑定优先级 > 隐式绑定优先级 > 默认绑定优先级 5...如何中断forEach循环? forEach中用return不会返回,函数会继续执行。 中断方法:使用try监视代码块,需要中断地方抛出异常。

9010

Mybatis夺命33问,你能回答道第几问

Hibernate属于全自动ORM映射工具,使用Hibernate查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取,所以它是全自动。...18、Mybatis如何执行批量操作 使用foreach标签 foreach主要用在构建in条件中,它可以SQL语句中进行迭代一个集合。...使用foreach时候最关键也是最容易出错就是collection属性,该属性是必须指定,但是不同情况下,该属性值是不一样,主要有一下3种情况: 如果传入是单参数且参数类型是一个List...接口绑定有两种实现方式 通过注解绑定,就是接口方法上面加上 @Select、@Update等注解,里面包含Sql语句来绑定; 通过xml里面写SQL来绑定, 在这种情况下,要指定xml映射文件里面的...Mybatis动态sql可以让我们Xml映射文件,以标签形式编写动态sql,完成逻辑判断和动态拼接sql功能 Mybatis提供了9种动态sql标签 trim|where|set|foreach

25720

理解jsthis

为什么使用this 如果没有this,那么我们代码会是下面的写法: 方法中,为了能够获取到name名称,必须通过obj引用(变量名称)来获取。...绑定规则 默认绑定 独立函数调用情况下使用默认绑定 独立函数调用我们可以理解成函数没有被绑定到某个对象上进行调用; 案例一:普通函数调用 function foo() { console.log...); // obj对象 } var obj = { name: "why", foo: foo } obj.foo(); 案例二:案例一变化 我们通过obj2又引用了obj1象,再通过obj1...: forEach中传入函数打印也是Window对象; 这是因为默认情况下传入函数是自动调用函数(默认绑定); var names = ["abc", "cba", "nba"]; names.forEach...; 全局作用域,this代表就是window var obj = { data: [], getData: () => { setTimeout(() => { console.log

3K30

面向 JavaScript 开发人员 ECMAScript 6 指南(4):标准库中新对象和类型

回想一下,ECMAScript 对象是一个名称-值集合,其中值可以是数据(字符串、数字、对象引用等)或行为(采用函数引用形式)。通常,如果您知道对象名称,就可以获得它值,这没什么疑问。...但是,某些情况下,对象所有者需要确保所选名称没有与其他名称冲突。在这种情况下,无需使用传统基于 String 名称,可以使用 Symbol 实例。Symbol 确保名称不会冲突。...values() 值执行同样操作 另外,像 Array 一样,Map 包含受函数语言启发方法,比如 forEach() Map 自身上运行。...ECMAScript 规范非常清楚地描述了 WeakMap 持有的对象上发生事;解释同样适用于 WeakSet: 如果一个被用作 WeakMap 键/值对象仅能跟随从 WeakMap 开始引用链访问...访问该方法意味着获取该方法(以便调用它),然后(对于 sayHowdy)获取该方法中引用所有属性值。 函数上代理处理函数 讲得更清楚一点,无论该属性是如何定义,始终会调用 get 处理函数。

62320

C#3.0新增功能03 隐式类型本地变量

从源代码角度来看,匿名类型没有名称。 因此,如果使用 var 初始化了查询变量,则访问返回对象序列中属性唯一方法是 foreach 语句中将 var 用作迭代变量类型。...var 不能在类范围字段使用。 使用 var 声明变量不能在初始化表达式中使用。...如果一种名为 var 类型处于范围,则 var 关键字会解析为该类型名称,不会被视为隐式类型化局部变量声明一部分。 带 var 关键字隐式类型只能应用于本地方法范围变量。...隐式类型不可用于类字段,因为 C# 编译器处理代码时会遇到逻辑悖论:编译器需要知道字段类型,但它在分析赋值表达式前无法确定类型,而表达式不知道类型情况下无法进行计算。...编译器尝试分析 bookTitles 时遇到相同悖论:它需要知道字段类型,但编译器通常会通过分析表达式来确定 var 类型,这在事先不知道类型情况下无法实现。

72820

MyBatis面试题(2020最新版)

Mybatis映射文件中,如果A标签通过include引用了B标签内容,请问,B标签能否定义A标签后面,还是说必须定义A标签前面?...Mybatis如何执行批量操作 使用foreach标签 foreach主要用在构建in条件中,它可以SQL语句中进行迭代一个集合。...使用foreach时候最关键也是最容易出错就是collection属性,该属性是必须指定,但是不同情况下,该属性值是不一样,主要有一下3种情况: 如果传入是单参数且参数类型是一个List...接口绑定有两种实现方式 通过注解绑定,就是接口方法上面加上 @Select、@Update等注解,里面包含Sql语句来绑定; 通过xml里面写SQL来绑定, 在这种情况下,要指定xml映射文件里面的...Mybatis动态sql可以让我们Xml映射文件,以标签形式编写动态sql,完成逻辑判断和动态拼接sql功能,Mybatis提供了9种动态sql标签trim|where|set|foreach|

4.1K60

MyBatis面试题(2020最新版)

Mybatis映射文件中,如果A标签通过include引用了B标签内容,请问,B标签能否定义A标签后面,还是说必须定义A标签前面?...Mybatis如何执行批量操作 使用foreach标签 foreach主要用在构建in条件中,它可以SQL语句中进行迭代一个集合。...使用foreach时候最关键也是最容易出错就是collection属性,该属性是必须指定,但是不同情况下,该属性值是不一样,主要有一下3种情况: 如果传入是单参数且参数类型是一个List...接口绑定有两种实现方式 通过注解绑定,就是接口方法上面加上 @Select、@Update等注解,里面包含Sql语句来绑定; 通过xml里面写SQL来绑定, 在这种情况下,要指定xml映射文件里面的...Mybatis动态sql可以让我们Xml映射文件,以标签形式编写动态sql,完成逻辑判断和动态拼接sql功能,Mybatis提供了9种动态sql标签trim|where|set|foreach|

70010

MyBatis XML简单理解

顶级元素 最外层可以包含元素。 cache – 配置给定命名空间缓存。 cache-ref – 从其他命名空间引用缓存配置。... foreach集合进行遍历(尤其是构建 IN 条件语句时候)。...>  foreach 元素功能非常强大,它允许你指定一个集合,声明可以元素体内使用集合项(item)和索引(index)变量。...当使用可迭代对象或者数组时,index 是当前迭代序号,item 值是本次迭代获取元素。当使用Map对象(或者 Map.Entry 对象集合)时,index 是键,item 是值。  ...使用foreach时候最关键也是最容易出错就是collection属性,该属性是必须指定,但是不同情况下,该属性值是不一样,主要有一下3种情况: 如果传入是单参数且参数类型是一个List

95520

MyBatis知识点

Mybatis映射文件中,如果A标签通过include引用了B标签内容,请问,B标签能否定义A标签后面,还是说必须定义A标签前面?...Mybatis如何执行批量操作 使用foreach标签 foreach主要用在构建in条件中,它可以SQL语句中进行迭代一个集合。...使用foreach时候最关键也是最容易出错就是collection属性,该属性是必须指定,但是不同情况下,该属性值是不一样,主要有一下3种情况: 如果传入是单参数且参数类型是一个List...接口绑定有两种实现方式: 通过注解绑定,就是接口方法上面加上 @Select、@Update等注解,里面包含Sql语句来绑定; 通过xml里面写SQL来绑定, 在这种情况下,要指定xml映射文件里面的...Mybatis动态sql可以让我们Xml映射文件,以标签形式编写动态sql,完成逻辑判断和动态拼接sql功能, Mybatis提供了9种动态sql标签trim|where|set|foreach

1.6K20

C#开发人员应该知道13件事情

第一种类型转换提出了一个问题,“为什么开发人员知道,而编译器不知道?”如果在这种情况下,尝试更改程序,以便编译器可以成功地推导出正确类型。...始终采用最合适工具,具有可重复性和尽可能接近用户所经历实际条件情况下性能进行经验性测量。 由于CLR优化,有时效率低下代码实际上比高效代码运行速度更快。...集合使用批处理操作 如果需要创建和填充已知大小集合,请在创建集合时保留空间,以避免由于重复重新分配而导致性能和资源问题。...C#编译器将确保访问字段具有获取和释放语义; 这不同于确保该字段所有访问都处于锁定状态。如果你不知道什么是获取和释放语义,以及它们如何影响CPU级优化,则应避免使用volatile字段。...例如,WPF中数据绑定,会将属性名称指定为字符串。如果不小心更改该属性名称,你将会无意中创建了一个编译器无法防护问题。 以上就是所有C#开发人员应该知道13件事情。

2.2K90

Excel编程周末速成班第3课:Excel对象模型

对象引用重要性 要使用对象,你需要对其进行引用。只是代码中用于引用对象名称。有时该对象已经存在,并且你代码需要做就是获取该对象引用。...后面的方法更有用,因为你通常不知道对象集合位置。 当引用集合成员时,可以通过两种方式使用引用。...使用集合时一个特别有用工具是ForEach … In语句,此语句设置一个代码循环,该循环集合每个项目重复一次,语法如下: For Each Item In Collection … Next...当到达Next语句时,执行将循环回到ForEach语句,将Item设置为引用集合下一个元素,然后重复该过程,直到处理完集合所有元素为止。如果开始时该集合为空,则执行仅跳过循环。...此名称显示Excel屏幕上工作表标签上,也可以用于从Worksheets或Sheets集合获取引用

5K30

快速入门系列--MVC--04模型

GetModel方法中,所用参数均来自于绑定上下文对象,通过模型名称获得值并转化为指定模型类型,简单类型处理上,已完全满足。...每一次递归都是将属性名称作为前缀附加到现有前缀作为下一次递归前缀。之后还有数组,集合,字典等类型绑定,其中都包含一个深复刻过程,有部分会涉及泛型方法反射应用,都比较相似就不一一介绍了。...不知道大家有没有这样感受,即使自己代码风格、设计理念非常认同,但重来没有说应该这样做底气。见笑了,言归正传,回到Model验证,内容比较,篇幅很能比较长,望见谅。     ...Model绑定验证解释起来比较拗口,但简单说来就是DefaultModelBinder递归绑定复杂对象过程中绑定对象实施验证,如下图所示。 ?     ...)渐进性增强和非入侵式Unobtrusive,最主要对意思就是页面可以不支持JS情况下显示基本内容,再浏览器允许情况增强显示效果。

90250

Spring官网阅读(十六)Spring中数据绑定

不知道大家看到这个方法名是否熟悉,如果源码有一定了解的话,一定会知道Spring完成属性注入过程中调用了一个同名方法,关于这个方法稍后我会带大家找一找然后做个比较,现在我们先看看doBind方法中...name,属性值为:dmz // 那就做处理如下: // 如果Bean中name属性是可写并且mpvs不存在name属性,那么向mpvs中添加一个属性,其中属性名称为name,值为...开头,以属性名称:“_name”,属性值dmz为例 // 如果Bean中name字段可写,并且mpvs没有这个值 // 那么Bean中name字段赋默认空值,比如Boolean类型默认给...false,数组给空数组[],集合给空集合,Map给空map // 然后移除mpvs中“_name” // 相当于说,当我们进行数据绑定时,传入“_name”时,如果没有传入具体属性值...开头属性名称) 可以让容器属性字段赋上某些空值(提供“_”开头属性名称) 可以将文件绑定到Bean上 使用示例 public class WebDataBinderMain { public static

1.5K30

Java 8中Lambda 和 Stream (from Effective Java 第三版)

它通常更短更清洁,不使用此方法,而是编写等效 lambda 内联:x -> x。   许多方法引用引用静态方法,但有四种方法引用不会引用静态方法。其中两个是绑定和未绑定实例方法引用。...绑定引用中,接收对象方法引用中指定。绑定引用在本质上类似于静态引用:函数对象采用与引用方法相同参数。绑定引用中,应用函数对象时,通过方法声明参数之前附加参数指定接收对象。...另一方面,你需要大部分功能接口都是为你编写,并且它们名称足够常规,以便你需要时不会遇到太多麻烦。   大多数标准功能接口仅提供基本类型支持。...在这种情况下,缩减意味着将流元素组合成单个对象。收集器生成对象通常是一个集合(它代表名称收集器((which accounts for the name collector))。   ...该函数接收一个单词,“提取(extraction)”实际上是一个表查找:绑定方法引用 freq::get 频率表中查找单词并返回单词文件中出现次数。

2.3K10

Vue 设计原理之响应式系统实现笔记( 一 )

按理修改 msg 时候副作用函数是不会再执行了才,因为,此时 status = 1 他就不会走到 obj.msg 那里,也就是不会触发 obj key 为 msg get 事件。...但实际上,按照前面的副作用函数存储方法他还是会触发到,因为,他第一步 status = 2 时候,已经给 status 和 msg 关联上了, map 字段中已经存在了他们之间关联集合。...,这里有一点是最开始我也没有想明白地方,就是将关系做了一个存储,并且最后删除操作不是直接操作 bucket 这个集合完成,怎么就做到了删除关联关系,原因就是存储时候,push 进去是他各依赖引用...,但是,现在需要看看副作用函数情况,如果仅仅按照上面的逻辑来执行也是不够,这时要考虑副作用函数嵌套情况下是不是有问题。...副作用函数嵌套问题嵌套问题一定是会存在一般是发生在引用组件情况下,举例:effect(()=>{ effect(()=>{ comp.render() }) comp.render

50351

Lambda表达式

如当我们需要依次打印某集合内容(如水果名字集合),之前我们使用 for 循环来完成打印,但使用Lambda表达式则可以: fruits.forEach(f -> { System.out.println...引用外部变量 Lambda表达式 { } 执行语句,除了能引用参数变量,还可以引用外部变量,但如: List fruits = Arrays.asList(......); String...Lambda引用外部变量存在规范: 规范一:引用局部变量 不允许被修改(即使写在表达式后面也不行) 当然写在 { } 修改也是不行。...即Lamdba表达式引用局部变量具备 final 特性。 表达式外实际赋值一次写法是允许。...所谓 顺序 就是 Lambda 表达式 () 中顺序。 用法四:父类方法 super 关键字作用是子类中引用父类属性或者方法。

26740

.NET反射、委托技术与设计模式

我们可以使用反射动态地创建类型实例,将类型绑定到现有对象或从现有对象中获取类型,然后调用类型方法或访问其字段和属性。反射通常具有以下用途。   ...(2)使用Module了解包含模块程序集以及模块中类等,还可以获取模块上定义所有全局方法或其他特定非全局方法。   ...(7)使用PropertyInfo了解属性名称、数据类型、声明类型、反射类型和只读或可写状态等,获取或设置属性值。   ...委托实例一个有用属性是它既不知道,也不关心其封装方法所属类详细信息,它来说最重要是这些方法与该委托类型兼容。...:   class Window{ public Darea Area;}这里不需要引用Rectangle类,只是执行时动态绑定即可:Rectangle rc = new Rectangle();Window

1.7K90
领券