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

C#枚举器(译)

这在C# 2.0中比 C# 1.1更容易实现一些。作为演示,我们先在 C# 1.1中为一个简单集合添加枚举,然后我们修改这个范例,使用C#2.0 枚举构建方法。...类它也需要一些特别了解;特别是,它必须可以获得ListBox字符串数组并且遍历其所包含字符串。...IEnumerable 类和与其相关 IEnumerator类之间关系有一点微妙。实现IEnumerator接口最好办法是在IEnumerable类里创建一个嵌套IEnumerator类。...注意,返回一个Object是因为IEnumerator接口中Current属性签名如此。...C# 2.0 解救办法 使用C# 2.0 这些问题如同五月末雪般融化了。在这个例子2.0版本中,我重写上面的列表,使用C# 2.0两个新特性:泛型 和 枚举器。

1.8K40
您找到你想要的搜索结果了吗?
是的
没有找到

C# 使用反射获取私有属性方法

本文告诉大家多个不同方法使用反射获得私有属性,最后通过测试性能发现所有的方法性能都差不多 在开始之前先添加一个测试类 public class Foo {...f = getter.Invoke(foo, null); 通过 GetGetMethod 可以拿到 MethodInfo 方法,如果对属性返回值是可见,如上面的 Foo 是使用 string 作为属性类...,在下面我测试了不同方法性能 测试 首先是通过 GetValue 方式经过 1 次 和 100 次运行,测试方法都是通过C# 标准性能测试 但是在测试完成需要告诉大家结论 使用 GetValue...方式和使用其他几个反射拿到属性方法性能都是差不多,所以不需要对私有属性反射去优化 Method Categories Mean Error StdDev 'GetProperty...,而带缓存调用和 GetGetMethod 方法调用时间几乎一样长 建议反射私有属性使用 GetValue 方法,因为只要调用非公有属性,调用时间就是这么长,无论通过表达式或其他方法都无法减少时间

1.5K10

C#遍历系统所安装打印机,使用WMI方式获取打印机所有属性

有网友发消息来询问,C#如何遍历系统已经安装所有打印机,并获得每个打印机相关信息,如:端口,名称等等 C#里面,虽然在 System.Drawing.Printing 这个namespace下...,提供了一些对系统打印机访问功能,但是,说实话是太弱了,对获取打印机相关属性基本是无能为力。...C#里面获取打印机详细信息,常用用2种方式: 使用 Windows API 使用 WMI 我这里使用是WMI方式,因为此方式,是采用了类SQL方法,将windowsWMI管理信息,作为一种数据库形态来提供...,使用起来比较顺手 .NET 里面对WMI使用,是放在 System.Management 这个空间下,要使用的话,需要先添加对 System.Management.dll 引用 具体代码如下:...属性名 : 属性形式 } } 应该是一目了然了吧,嘿嘿

2.1K10

迭代器模式

C#编辑器编译成IL代码会包含IEnumerator实现。....NET Framework中迭代器模式应用 C#foreach语句其实就是迭代器模式。任何可以使用foreach进行遍历对象,它一定是实现了IEnumerable接口。...任何实现了IEnumerable接口对象集合都可以使用foreach遍历。...yield return 语句返回表达式不仅决定了循环体使用element变量值,还决定了elementsCurrent属性。我们通过一张图来看迭代器执行过程: ?...迭代器模式使用感受 迭代器模式是与集合类紧密绑定在一起,一般来说,我们只要实现一个集合类,就应该同时提供这个集合迭代器,就像C#Collection,List、Set、Map等,这些集合都有自己迭代器

62730

迭代器模式

1.概要 主要思想和实现方式: 迭代器模式主要思想是将数据存储和遍历分离,使得客户端可以通过统一接口遍历不同类型集合,而不需要关心集合具体实现。...在C#中,迭代器模式可以通过实现IEnumerable接口和IEnumerator接口来实现。...IEnumerator接口包含了MoveNext()方法,用于移动迭代器到集合下一个元素,以及Current属性,用于获取当前元素值。...适用场景: 当集合背后为复杂数据结构,且希望对客户端隐藏其复杂性时,可以使用迭代器模式。迭代器封装了与复杂数据结构进行交互细节,提供了简洁遍历接口。...接口属性和方法 public object Current { get { return items[position]; } } public bool

13530

C#属性

目录 什么是属性(Attribute) 自定义属性 如何使用属性 限制属性使用范围 如何访问属性 反射访问 总结 这篇文章主要面向对象是初级开发人员,以及对属性不是很熟悉开发人员。...什么是属性(Attribute) 属性C#中很常用,但有部分开发人员对它既熟悉又陌生。概念上属性是将元数据关联到元素方式。...如何使用属性 在本文前面说过,属性可以放在类、字段和方法等定义前面(上面),那么,我们来看一下如何使用上一小节中自定义属性,代码如下: [Car("BMW", "x3")] public class...就是使用是CarAttribute短名称) 限制属性使用范围 属性本身是一个类,因此属性也可以用其他属性来指定和修饰。...元数据在构建项目时被编译并描述元素而不是元素数据。我们可以继承Attribute类来自定义属性,并使用AttributeUsage属性限制属性使用范围,并通过反射来获取属性数据。

1.8K10

【JavaScript】对象 ⑤ ( 遍历对象 | for…in 循环 遍历对象 | Object.keys() 遍历对象 属性名称 | Object.entries() 遍历对象属性键值对 )

可以使用如下几种方法 : 使用 for…in 循环 遍历对象 使用 Object.keys() 遍历对象 属性名称 使用 Object.values() 遍历对象 属性使用 Object.entries...() 遍历对象 属性名称 + 属性值 键值对组合 ; 二、遍历对象 1、使用 for…in 循环 遍历对象 for…in 循环 既可以用于遍历数组 , 又可以用于遍历对象可枚举属性 ; 代码示例...Object.keys() 遍历对象 属性名称 调用 Object.keys() 方法 可以返回一个表示 给定对象所有 可枚举属性 字符串数组 , 然后 使用 forEach 数组遍历方法...属性字符串数组 , 传入参数是 要遍历对象 ; 得到 属性名 字符串数组后 , 可以使用 遍历数组方法 , 如 forEach 方法 , 遍历该数组 , 打印出每个对象值 ; 完整代码示例...Object.values() 遍历对象 属性值 在 JavaScript 中 , 调用 Object.values() 方法返回一个数组 , 数组元素是在给定对象上找到可枚举属性值 , 然后使用数组遍历方法来遍历这些值

23710

C# 使用反射获取私有属性方法 测试

本文告诉大家多个不同方法使用反射获得私有属性,最后通过测试性能发现所有的方法性能都差不多 在开始之前先添加一个测试类 public class Foo {...f = getter.Invoke(foo, null); 通过 GetGetMethod 可以拿到 MethodInfo 方法,如果对属性返回值是可见,如上面的 Foo 是使用 string 作为属性类...,在下面我测试了不同方法性能 测试 首先是通过 GetValue 方式经过 1 次 和 100 次运行,测试方法都是通过C# 标准性能测试 但是在测试完成需要告诉大家结论 使用 GetValue...方式和使用其他几个反射拿到属性方法性能都是差不多,所以不需要对私有属性反射去优化 Method Categories Mean Error StdDev 'GetProperty 调用1次反射...,而带缓存调用和 GetGetMethod 方法调用时间几乎一样长 建议反射私有属性使用 GetValue 方法,因为只要调用非公有属性,调用时间就是这么长,无论通过表达式或其他方法都无法减少时间

2.2K20

使用C# (.NET Core) 实现组合设计模式 (Composite Pattern)

本文概念性内容来自深入浅出设计模式一书. 本文需结合上一篇文章(使用C# (.NET Core) 实现迭代器设计模式)一起看. 上一篇文章我们研究了多个菜单一起使用问题....我们需要一种类似树形结构, 让其可以容纳/适应菜单, 子菜单以及菜单项. 我们还需要维护一种可以在该结构下遍历所有菜单方法, 要和使用遍历器一样简单....遍历条目的方法需要更灵活, 例如, 我可能只遍历DinerMenu下甜点菜单(dessert menu), 或者遍历整个Diner Menu, 包括甜点菜单. ? ?...针对需求我们可以创建出一种树形结构, 它可以把嵌套菜单或菜单项在相同结构下进行处理. 组合和单个对象是指什么呢?...我们也可以在Menu里面实现IsVegetarian属性Get方法, 这可以保证透明性. 但是这样做不一定合理, 也许其它人有更合理原因会把MenuIsVegetarian给实现了.

1K00

js遍历对象属性一些方法有哪些_js面试遍历对象所有属性

1.Reflect.ownKeys() 静态方法 Reflect.ownKeys()返回一个由目标对象自身属性键组成数组。...2.Object.entries(obj) Object.entries()方法返回一个给定对象自身可枚举属性键值对数组,其排列与使用for...in循环遍历该对象时返回顺序一致(区别在于 for-in...循环还会枚举原型链中属性)。...如果下列任何一项成立,则两个值相同: 两个值都是 undefined 两个值都是 null 两个值都是 true或者都是 false 两个值是由相同个数字符按照相同顺序组成字符串 两个值指向同一个对象...两个值都是数字并且 都是正零 +0 都是负零 -0 都是 NaN 都是除零和 NaN外其它同一个数字 这种相等性判断逻辑和传统 == 运算不同: ==运算符会对它两边操作数做隐式类型转换(如果它们类型不同

5.6K10

重温设计模式 --- 迭代器模式

引言 迭代器模式是一种行为型设计模式,它允许按照特定顺序遍历集合对象元素,同时不暴露集合内部结构。这样做可以让客户端代码不依赖于集合对象具体实现,从而提高代码灵活性和可重用性。...在迭代器模式中,聚合对象将其遍历职责委托给迭代器对象,而不是在聚合对象中实现遍历。 迭代器模式优点是可以支持以不同方式遍历一个聚合对象,而且可以隐藏遍历元素内部细节。...在 C# 中,迭代器模式可以通过实现IEnumerable和IEnumerator接口来实现。...它可以让我们轻松地遍历集合对象中元素,而不必暴露集合内部结构。此外,通过实现IEnumerable和IEnumerator接口,我们可以轻松地在 C# 中实现迭代器模式。...foreach是C#语法糖,用来遍历实现了IEnumerable接口集合类。

11410

IEnumerable 使用foreach 详解

并没有想象那么复杂。其中IEnumerable只有一个返回IEnumeratorGetEnumerator方法。而IEnumerator中有两个方法加一个属性。...下面使用原始方式调用: ? 有朋友开始说了,我们平时都是通过foreache来取值,没有这样使用过啊。好吧,我们来使用foreach循环: ? 为什么说基本上是等效呢?...下次面试官问你时候一定要争个死去活来啊,哈哈! yield使用 你肯定发现了我们自己去实现IEnumerator接口还是有些许麻烦,并且上面的代码肯定是不够健壮。...执行到MyWhere时候什么动作都没有(返回就是IEnumerable),只有执行到ToList时候才代码才真正遍历筛选。 这里MyWhere其实可以用扩展方法来实现,提升逼格。...(Linq那些查询操作符就是以扩展形式实现)[了解扩展方法]。 怎样高性能随机取IEnumerable中值 ? 这段代码来源《深入理解C#》,个人觉得非常妙。贴出来给大家欣赏哈。

1.7K40

枚举器与迭代器

这次我们再次来讲解一下开发人员会用但不理解C#知识,这篇文章我们讲解一下枚举器与迭代器知识。...最后使用枚举器 Current 属性获得游标指向值,并打印出来。打印结果如下: ? 如果枚举器实现了 IDisposable 接口,这时 foreach 语句可以隐式清理掉枚举对象。...一、迭代器 1.什么是迭代器 迭代器简化了对象间通信,使得不关心序列类型,而获得序列中每个元素。C#中迭代器被 IEnumerator 和 IEnumerable 和其对应泛型接口封装。...3.语义 迭代器含有一个或多个 yield 语句方法、属性或者索引器。...迭代器我们可以嵌套使用,我们看一下例子: class Program { static void Main(string[] args) { foreach (int fib

42010
领券