大家好,请问这个属性是什么意思?一个属性是IEnumerable<>泛型接口类型是什么意思?

问题描述

publicoverrideIEnumerable<ModuleReference>Modules{get{//Pleasefillthismethodwithyourmoduleswithlineslikethis://yieldreturnnewModuleReference(typeof(Module));yieldreturnnewModuleReference(typeof(HelloModule));yieldreturnnewModuleReference(typeof(HelloModule2));}}首先我想问,属性是IEnumerable<>泛型接口类型是什么意思?为什么属性可以是接口类型?为什么这段代码不写成publicoverridelist<ModuleReference>Modules但是我拿到的这段代码,经常用IEnumerable<>泛型接口当成类型修饰符,为什么要这么用呢?这是我十分困惑的还有这里面的get方法中,yieldreturn是什么意思,他到底在做什么?这个属性Modules上文中并没有对应的私有字段。同时,这个属性方法get里只是yieldreturn,并没有出现类似_modules=newModuleReference(typeof(Module));这样的语句还有想知道这样的属性想调用是怎么调用呢

解决方案

本帖最后由 shuxiaolele 于 2016-02-20 23:59:25 编辑
解决方案二:
yieldreturn这个关键字你不能去查下的……我都懒得给你贴链接msdn查下就知道了
解决方案三:
那我贴个链接吧
解决方案四:
有哪位大神能讲讲么?用泛型接口做类型是什么意思?
解决方案五:
引用1楼starfd的回复:

yieldreturn这个关键字你不能去查下的……我都懒得给你贴链接msdn查下就知道了

查了,我没看懂。我是问这段代码写了是什么意思,不是说某个语法
解决方案六:
引用1楼starfd的回复:

yieldreturn这个关键字你不能去查下的……我都懒得给你贴链接msdn查下就知道了

您好,我想问的问题主要是:首先我想问,属性是IEnumerable<>泛型接口类型是什么意思?为什么属性可以是接口类型?为什么这段代码不写成publicoverridelist<ModuleReference>Modules
解决方案七:
IEnumerable是指可用foreach遍历的“集合”。yieldreturn你可以理解为一个虚的结果,只有在foreach内部真正用到某个结果时,才会给真的。不用List是因为没必要。假设有一卖火柴的小女孩,一毛钱一把(5根)。这一把就是IEnumerable<火柴>,大多数情况下你只要能从这把里一根一根的拿出来用好,沒必要在每根火柴上贴上标签,再装入盒子。yieldreturn相当于你买一把火柴后,并没有马上拿到,而是在用的时候(比如:点烟)时,小女孩才一根一根给你。(只要在5根用完前把烟点着,那小女孩就赚了。)
解决方案八:
1.Enumerable<>泛型接口类型--答:就是指一个数据的结构,比如int型,string型,2.为什么属性可以是接口类型答:既然属性可以是int型。为什么不可以是接口类型。它只代表一个数据结构。3.为什么这段代码不写成publicoverridelist<ModuleReference>Modules答:list《T》已经实现了Enumerable<>泛型接口。如果用list。把newModuleReference(typeof(HelloModule));newModuleReference(typeof(HelloModule2));添加到list里面。直接调用foreach效果等同上面的代码。至于为什么不用list。这个不得而知,不过list<t>的内部实现也是调用yieldreturn;4.yieldreturn是什么意思。楼上https://msdn.microsoft.com/zh-cn/library/dscyy5s0.aspx贴出的写得很详细。你只需要知道这个是语法,语法是什么?就是一套c#设计出来就已经规定好的编码规则。整个代码执行的结果就是调用foreach遍历Modules时依次返回newModuleReference(typeof(HelloModule))。newModuleReference(typeof(HelloModule2));
解决方案九:
引用2楼shingoscar的回复:

那我贴个链接吧

非常感谢,您的引用6楼qbilbo的回复:

IEnumerable是指可用foreach遍历的“集合”。yieldreturn你可以理解为一个虚的结果,只有在foreach内部真正用到某个结果时,才会给真的。不用List是因为没必要。假设有一卖火柴的小女孩,一毛钱一把(5根)。这一把就是IEnumerable<火柴>,大多数情况下你只要能从这把里一根一根的拿出来用好,沒必要在每根火柴上贴上标签,再装入盒子。yieldreturn相当于你买一把火柴后,并没有马上拿到,而是在用的时候(比如:点烟)时,小女孩才一根一根给你。(只要在5根用完前把烟点着,那小女孩就赚了。)

我晕,你讲的太形象了。真的,你要是写书绝对好。我看了那么多,都是模模糊糊的,你一句话就把我搞清楚了
解决方案十:
引用7楼qq_34038955的回复:

1.Enumerable<>泛型接口类型--答:就是指一个数据的结构,比如int型,string型,2.为什么属性可以是接口类型答:既然属性可以是int型。为什么不可以是接口类型。它只代表一个数据结构。3.为什么这段代码不写成publicoverridelist<ModuleReference>Modules答:list《T》已经实现了Enumerable<>泛型接口。如果用list。把newModuleReference(typeof(HelloModule));newModuleReference(typeof(HelloModule2));添加到list里面。直接调用foreach效果等同上面的代码。至于为什么不用list。这个不得而知,不过list<t>的内部实现也是调用yieldreturn;4.yieldreturn是什么意思。楼上https://msdn.microsoft.com/zh-cn/library/dscyy5s0.aspx贴出的写得很详细。你只需要知道这个是语法,语法是什么?就是一套c#设计出来就已经规定好的编码规则。整个代码执行的结果就是调用foreach遍历Modules时依次返回newModuleReference(typeof(HelloModule))。newModuleReference(typeof(HelloModule2));

哇,讲的好透彻
解决方案十一:
引用7楼qq_34038955的回复:

1.Enumerable<>泛型接口类型--答:就是指一个数据的结构,比如int型,string型,2.为什么属性可以是接口类型答:既然属性可以是int型。为什么不可以是接口类型。它只代表一个数据结构。3.为什么这段代码不写成publicoverridelist<ModuleReference>Modules答:list《T》已经实现了Enumerable<>泛型接口。如果用list。把newModuleReference(typeof(HelloModule));newModuleReference(typeof(HelloModule2));添加到list里面。直接调用foreach效果等同上面的代码。至于为什么不用list。这个不得而知,不过list<t>的内部实现也是调用yieldreturn;4.yieldreturn是什么意思。楼上https://msdn.microsoft.com/zh-cn/library/dscyy5s0.aspx贴出的写得很详细。你只需要知道这个是语法,语法是什么?就是一套c#设计出来就已经规定好的编码规则。整个代码执行的结果就是调用foreach遍历Modules时依次返回newModuleReference(typeof(HelloModule))。newModuleReference(typeof(HelloModule2));

非常感谢
解决方案十二:
引用3楼shuxiaolele的回复:

有哪位大神能讲讲么?用泛型接口做类型是什么意思?

我感觉你这里是理解错误,其中并不是泛型接口做类型。实际上Modules是一个对象,并不是一个类型。也就说这里是定义了一个满足泛型接口要求的对象。对你的其它内容我说说我的理解,希望对你有帮助://首先我想问,属性是IEnumerable<>泛型接口类型是什么意思?为什么属性可以是接口类型?属性是一个对象,只是通过类型修饰符来进行定义。//为什么这段代码不写成publicoverridelist<ModuleReference>ModulesIEnumerable<T>与LINQ紧密相连,优于list<T>//但是我拿到的这段代码,经常用IEnumerable<>泛型接口当成类型修饰符,为什么要这么用呢?这是我十分困惑的这里体现了IEnumerable<T>的通用性和优越性//还有这里面的get方法中,yieldreturn是什么意思,他到底在做什么?这是以迭代的方式生成了一个集合,使用yieldreturn是编译器对迭代器做的优化。//这个属性Modules上文中并没有对应的私有字段。编译器会自动生成私有字段,是C#3.0以上的一个特性,叫“自动实现的属性”,可以减少编程人员的编码量//同时,这个属性方法get里只是yieldreturn,并没有出现类似_modules=newModuleReference(typeof(Module));这样的语句yieldreturnnewModuleReference(typeof(HelloModule2));在这里已经进行实现。如果是对Modules有疑问的话,其实很多对象并不需要显式初始化,编译器或者设计人员已经隐式完成了。//还有想知道这样的属性想调用是怎么调用呢正常像其它属性一样就行了
解决方案十三:
引用11楼gxmark的回复:

Quote: 引用3楼shuxiaolele的回复:
有哪位大神能讲讲么?用泛型接口做类型是什么意思?

我感觉你这里是理解错误,其中并不是泛型接口做类型。实际上Modules是一个对象,并不是一个类型。也就说这里是定义了一个满足泛型接口要求的对象。对你的其它内容我说说我的理解,希望对你有帮助://首先我想问,属性是IEnumerable<>泛型接口类型是什么意思?为什么属性可以是接口类型?属性是一个对象,只是通过类型修饰符来进行定义。//为什么这段代码不写成publicoverridelist<ModuleReference>ModulesIEnumerable<T>与LINQ紧密相连,优于list<T>//但是我拿到的这段代码,经常用IEnumerable<>泛型接口当成类型修饰符,为什么要这么用呢?这是我十分困惑的这里体现了IEnumerable<T>的通用性和优越性//还有这里面的get方法中,yieldreturn是什么意思,他到底在做什么?这是以迭代的方式生成了一个集合,使用yieldreturn是编译器对迭代器做的优化。//这个属性Modules上文中并没有对应的私有字段。编译器会自动生成私有字段,是C#3.0以上的一个特性,叫“自动实现的属性”,可以减少编程人员的编码量//同时,这个属性方法get里只是yieldreturn,并没有出现类似_modules=newModuleReference(typeof(Module));这样的语句yieldreturnnewModuleReference(typeof(HelloModule2));在这里已经进行实现。如果是对Modules有疑问的话,其实很多对象并不需要显式初始化,编译器或者设计人员已经隐式完成了。//还有想知道这样的属性想调用是怎么调用呢正常像其它属性一样就行了

非常感谢您的回复,有一点仍然不明白的是,在这行代码publicoverridelist<ModuleReference>Modules中,ModuleReference是指的一个类型么。引用11楼gxmark的回复:

Quote: 引用3楼shuxiaolele的回复:
有哪位大神能讲讲么?用泛型接口做类型是什么意思?

我感觉你这里是理解错误,其中并不是泛型接口做类型。实际上Modules是一个对象,并不是一个类型。也就说这里是定义了一个满足泛型接口要求的对象。对你的其它内容我说说我的理解,希望对你有帮助://首先我想问,属性是IEnumerable<>泛型接口类型是什么意思?为什么属性可以是接口类型?属性是一个对象,只是通过类型修饰符来进行定义。//为什么这段代码不写成publicoverridelist<ModuleReference>ModulesIEnumerable<T>与LINQ紧密相连,优于list<T>//但是我拿到的这段代码,经常用IEnumerable<>泛型接口当成类型修饰符,为什么要这么用呢?这是我十分困惑的这里体现了IEnumerable<T>的通用性和优越性//还有这里面的get方法中,yieldreturn是什么意思,他到底在做什么?这是以迭代的方式生成了一个集合,使用yieldreturn是编译器对迭代器做的优化。//这个属性Modules上文中并没有对应的私有字段。编译器会自动生成私有字段,是C#3.0以上的一个特性,叫“自动实现的属性”,可以减少编程人员的编码量//同时,这个属性方法get里只是yieldreturn,并没有出现类似_modules=newModuleReference(typeof(Module));这样的语句yieldreturnnewModuleReference(typeof(HelloModule2));在这里已经进行实现。如果是对Modules有疑问的话,其实很多对象并不需要显式初始化,编译器或者设计人员已经隐式完成了。//还有想知道这样的属性想调用是怎么调用呢正常像其它属性一样就行了

还有个问题想请教您,请问用IEnumerable<T>做属性或方法的类型修饰符主要是为了干什么,是想让这个属性或方法干什么才这样用的

时间: 2024-09-20 10:52:48

大家好,请问这个属性是什么意思?一个属性是IEnumerable&amp;lt;&amp;gt;泛型接口类型是什么意思?的相关文章

请问如何重写自定义变量中一个属性的操作符?

问题描述 可能这问题比较偏门.之前旧的程序中自定义了一个类型叫hole,有一个属性是id,类型为int.现在因为业务的扩展需要改为guid.为了不影响系统现在的使用,我增加了一个新字段叫idnew,类型为guid.之前调用id的代码非常多,主要用于判断id是否相等.我想请问下有没有可能重写id的==运算符.当idnew有值时,使用idnew来进行比较.而idnew为null或newguid时,仍旧使用id进行比较(为了方便新旧两套系统的切换,可能需要同时使用一段时间这两个不同类型的id)谢谢 解

有没有人用过C# PropertyGrid这个控件,请问这个控件怎样动态设置一个属性是否可用?

问题描述 问题如上,请同行们帮助小弟一下.谢谢了.补充说明:我指的动态设置一个属性是否可用,是想当PropertyGrid控件中的一个下拉框选中true时,PropertyGrid中的某一个属性可用,当为flase时那个属性变为灰色. 解决方案 解决方案二:可以做到,但是很复杂,解决方案有很多种,要取决于你原来的程序结构.但是无论用什么方法最后不外乎继承重写PropertyDescriptor或者自定义TypeConverter搜索这两个关键字相信你能够找到很多资料解决方案三:当下拉框值更改时判

vb.net List 的问题 当满足List的某个属性,返回List的另一个属性

问题描述 vb.net List 的问题 当满足List的某个属性,返回List的另一个属性 请问,有一个ListList.id从0到7List.value是任意值当它的List.id=某个0到7的值现在要返回List.value的值 这个怎么写呢? 解决方案 Return list.Where(Function(x) x.id >= 0 and x.id <= 7).Select(Function(x) x.value)

用一个字符名称调用一个属性或者方法

在设计的大部分时候,用户可以发现一个对象的属性和方法,并且可以写一些代码来处理这些方法.然而在一些时候,不能提前知道一个对象的属性和方法,或者只是想在运行程序的时候能具有指定属性和运行不同方法的灵活性. 举一个例子,一个客户端的运行程序通过给一个COM组件一个操作来计算一个表达式.假想现在正在给服务器加一个需要新的操作描述的函数.不幸的是,这时必须重新编译和发布客户端软件才能使用新的操作.为了避免这种情况,用户可以使用CallByName函数来把新的操作当成一个字符给服务器加载这个函数,而不需要

WinForm控件开发总结(九) 为属性提下拉式属性编辑器

在上一篇文章,我介绍了如何编写模态对话框属性编辑器,这篇文章我将介绍如何编写下拉式属性编 辑器.下拉式(DropDown)属性编辑器和模态对话框属性编辑器的不同之处就是,当你点击属性值修改的 时候,模态对话框编辑器是弹出一个模态对话框,而下拉式属性编辑器却是在紧贴着属性值的地方显示一 个下拉的控件.不知道大家注意到了没有,这里我说的是显示一个下拉的控件,而这个控件也是需要你去 开发的,接下来我还是以Scope属性为例,介绍一下具体的实现. 首先我们要创建一个用于编辑属性的控件,在本系列文章的开始

magento -- 按某个属性排序上的一个尝试

Magento的属性可以用来放在产品列表页给产品进行排序,要用来排序的属性只需要在后台属性管理的地方选择应用于排序,默认情况下是name和price这两个属性可以在前台用来排序(Position是例外). 那么现在有个简单的尝试,就是新增一个属性,只允许填写数字,然后前台的产品可以按照数字的大小来对产品进行排序.看起来很合理的需求,尝试起来却遇到了麻烦. 首先要决定这个属性的输入类型,magento允许的输入类型如下图所示,看上去既能手动输入又能限制输数字的就只能是文本框了. 所以先尝试了用文本

link环境下制作一款《订餐软件》,请问多个库存合并为一个库存然后打票怎么实现呢?

问题描述 link环境下制作一款<订餐软件>,请问多个库存合并为一个库存然后打票怎么实现呢? link环境下制作一款<订餐软件>,请问多个库存合并为一个库存然后打票怎么实现呢? 解决方案 分为两个部分,一个和是合并,一个票据的套打,前者你可以通过存储过程来实现,后者你可以用报表控件和票据打印机打印,也可以自己设置格式. 解决方案二: 库存合并是出现在后台管理中的一个功能么?应该在后台管理系统进行库存管理,将实际数据进行整理(需要开发一个web界面). 打票是用热敏打印机+小票的形式

spring管理hibernate,请问如何保证所有操作是一个事务内完成的?具体如下:

问题描述 spring管理hibernate,请问如何保证所有操作是一个事务内完成的?具体如下: transactionTemplate.execute(new TransactionCallbackWithoutResult(){ protected void doInTransactionWithoutResult(TransactionStatus transactionStatus){ Session session = null; Transaction tx = null; try{

IIS 无法识别的属性“targetFramework”。请注意属性名称区分大小写。

具体错误信息如下: "/TestService"应用程序中的服务器错误. 配置错误 说明: 在处理向该请求提供服务所需的配置文件时出错.请检查下面的特定错误详细信息并适当地修改配置文件. 分析器错误消息: 无法识别的属性"targetFramework".请注意属性名称区分大小写. 源错误: 行 31: </connectionStrings> 行 32: <system.web> 行 33: <compilation debug=&q