首页
学习
活动
专区
工具
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绑定内集合的引用的方法。这些方法可以帮助开发人员在需要操作绑定的集合时获取到集合的引用,从而进行相应的操作。

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

相关·内容

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 是父容器的名称。...-- 省略 --> 别问我为什么会有以上这样诡异的代码。我也不知道,这只是偶然发现的代码,我简化后拿到博客中。

3.1K20

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

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

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

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

    11610

    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

    31220

    MyBatis系列

    8、输出结果映射:输出结果类型可以是 Map、 List 等集合类型,也可以是基本 数据类型和 POJO 类型。输出结果映射过程类似于 JDBC 对结果集的解析过程。 ...还有一个重要的原因,防止SQL注入 六:Mybatis如何进行批量操作 使用foreach标签 foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。...在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是 在不同情况下,该属性的值是不一样的,主要有一下3种情况: 1....> 七:实体类的属性名和表字段中的名称不一样,怎么解决 第1种: 通过在查询的SQL语句中定义字段名的别名,让字段名的别名和实体类的属性名一致 绑定, 在这种情况下,要指定xml映射文件里面的namespace必须为 接口的全路径名。

    6910

    理解js的this

    为什么使用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 处理函数。

    64320

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

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

    75520

    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|

    72210

    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.2K71

    MyBatis XML简单理解

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

    99220

    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.3K90

    纯血鸿蒙APP实战开发——应用异常处理案例

    介绍本示例介绍了通过应用事件打点 hiAppEvent 获取上一次应用异常信息的方法,主要分为应用崩溃、应用卡死以及系统查杀三种。...,系统会使用名称来标识不同的观察者 name: "mst", // 开发者可以订阅感兴趣的系统事件,此处是订阅了崩溃事件 appEventFilters: [ {...开发者可以自行实现订阅实时回调函数,以便对订阅获取到的事件数据进行自定义处理 onReceive: async (domain: string, appEventGroups: Array的事件组信息,调用getFaultMessage函数对信息进行处理,将处理后的信息通过 this.faultDataSource.pushData...((eventGroup: hiAppEvent.AppEventGroup) => { // 遍历事件对象集合 eventGroup.appEventInfos.forEach

    8920

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

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

    5.1K30

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

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

    2.3K10

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

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

    93350

    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.6K30

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

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

    54851
    领券