GetEnumclover configratorr怎么读

拒绝访问 | www.wangchao.net.cn | 百度云加速
请打开cookies.
此网站 (www.wangchao.net.cn) 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(41f3dc9f115b4d14-ua98).
重新安装浏览器,或使用别的浏览器以下这段程序提示说错误 1 使用泛型 类型“System.Collections.Generic.IEnumerable&T&”需要“1”个类型_百度知道
以下这段程序提示说错误 1 使用泛型 类型“System.Collections.Generic.IEnumerable&T&”需要“1”个类型
using System.Collections.G
using System.L
using System.T
namespace ConsoleApplication12
public class Tokens : IEnumerable
Tokens(string source, cha...
我有更好的答案
在给你贴完整的修正代码之前我要指出几个严重的问题.明显可以看出你要的是Tokens类维护一个string集合(依你的需求string[]足矣),也就是elements,那么在指示Tokens继承集合接口IEnumrable时应使用IEnumrable&string&做标记.IEnumrable&string&接口要求实现public IEnumerator&string& GetEnumerator()和System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()两个方法,出于资源复用和节省开销等因素,该枚举器应来源于Tokens类中的私有成员,而不是像你的代码一样每次新建一个枚举器;同理,新建枚举器是无法保存当前位置(position)的,除非再次浪费资源传进去.通用的做法是在Tokens中声明private TokenEnumrator elementEnumrator,并且在Tokens构造时就将该elementEnumrator初始化.其他的小问题.string应该是string[]或者List&string&; 还有new char { ' ', '-' }太让人费解了,将Tokens的构造写成Tokens(string source,param char[] deleniters)更符合你的需求....etc...最后也是最重要的一点,泛型让一切集合操作变得如此简单,既然框架已经提供了各种现有的强大的类,能用就尽量用吧.说实在的,自己重写枚举器我1年都不会写超过一次,你的例子很简单,一个List&T&搞定.如果需要干涉其枚举器,就通过GetEnumrator&T&方法取出来自己操作,更复杂的情况下,请override相关方法,免得自己实现每一个接口方法费时费力.你要的代码见下,已调试.这是改动最小的情况下,不是最优代码:&public class Tokens : IEnumerable&string&& & {& & & & private string[]& & & & private TokenE& & & & public Tokens(string source, params char[] deleniters)& & & & {& & & & & & elements = source.Split(deleniters);& & & & & & enumrator = new TokenEnumrator(elements);& & & & }& & & & public IEnumerator&string& GetEnumerator()& & & & {& & & & & && & & & }& & & & System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()& & & & {& & & & & && & & & }& & & & class TokenEnumrator : IEnumerator&string&& & & & {& & & & & & string[]& & & & & & int position = -1;& & & & & & public TokenEnumrator(string[] elements)& & & & & & {& & & & & & & & this.elements =& & & & & & }& & & & & & public string Current& & & & & & {& & & & & & & & get { return position == -1 ? null : elements[position]; }& & & & & & }& & & & & & public void Dispose()& & & & & & {& & & & & & }& & & & & & object System.Collections.IEnumerator.Current& & & & & & {& & & & & & & & get { return position == -1 ? null : elements[position]; }& & & & & & }& & & & & & public bool MoveNext()& & & & & & {& & & & & & & & if (position & elements.Length - 1)& & & & & & & & {& & & & & & & & & & position++;& & & & & & & & & && & & & & & & & }& & & & & & & & else& & & & & & & & & && & & & & & }& & & & & & public void Reset()& & & & & & {& & & & & & & & position = -1;& & & & & & }& & & & }& & }& & class Program& & {& & & & static void Main(string[] args)& & & & {& & & & & & Tokens f = new Tokens(&This is well-done program.&, ' ', '-');& & & & & & foreach (string item in f)& & & & & & {& & & & & & & & Console.WriteLine(item);& & & & & & }& & & & & & Console.ReadKey();& & & & }& & }QQ 欢迎骚扰
我去,大神。。谢谢啦。。
...我正在修改回答来着...楼上说的加一个System.Collentions空间引用的方法是通用且可行的,但是我个人强烈建议使用泛型标示至少IEnumrable&&,方便代码规整,而且在使用其枚举器IEnumrator&&时可以明确的知道其维护的元素的类型.最典型的例子: f.GetEnumerator().Current不使用泛型IEnumrable&&时只会返回object,有时候代码多脑子乱还要去看Tokens是怎么写的...还不如用IEnumrable&T&,直接得到T类型的值.个人建议而已...请随便看看
采纳率:83%
你是用的是泛型接口,需要指定泛型参数类型,把类声明改为:public class Tokens&String& : IEnumerable&T&第二个类估计也得改成这样,还有,你第一个类中的字段应该是String[]类型吧
额。。能给个修改完成的么?。。
我勒个去。。 明显是这个问题。接口IEnumerable&out T&是在System.Collections.Generic这个命名空间的,楼主你使用的IEnumerable是在命名空间System.Collections。你只引用了System.Collections.Generic命名空间是没有这个IEnumerable这个接口的只有IEnumerable&out T&接口,当然就报System.Collections.Generic.IEnumerable&T&”需要“1”个类型。。。。。。引用System.Collections这个命名空间就ok,具体泛型什么的你这里还不需要用到吧。
亲 你这应该是少了命名空间了。
using System.Collections.G
你把鼠标放在出错代码上---鼠标右键----解析。 就行了。
额。。这个应该有吧。。你看我的第二行。。。
其他1条回答
为您推荐:
其他类似问题
泛型的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。没有更多推荐了,
不良信息举报
举报内容:
java的System.getProperty()方法可以获取的值
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!IEnumerable和IEnumrator用法
先用一个修改过的代码来演示用法,只来干的,不来稀的。[csharp/** Created by SharpDevelop.* User: Owner* Date: * Time: 13:43* * To change this template use Tools | Options...
先用一个修改过的代码来演示用法,只来干的,不来稀的。
* Created by SharpDevelop.
* User: Owner
* Time: 13:43
* To change this template use Tools | Options | Coding | Edit Standard Headers.
using System.C
/// &summary&
/// IEnumerable和IEnumrator组合起来使用实现foreach。
/// &/summary&
namespace TestIEnumeratorAndIEnumratable
/// &summary&
/// 个体类:这个类保存了单个体的信息和一个方法
/// &/summary&
public class 个体
public string 信息1;
public string 信息2;
public 个体(string 信息1, string 信息2)
this.信息1 = 信息1;
this.信息2 = 信息2;
public void 报数()
Console.WriteLine(this.信息1 + " = " + this.信息2);
/// &summary&
/// 集体类:继承自IEnumerable接口,并提供foreach的可能。
/// &/summary&
public class 集体 : IEnumerable
/// &summary&
/// 集体就是一票个体
/// &/summary&
private 个体[] 一票个体;
/// &summary&
/// 这个集体为了简便,是有初始的一群个体凑一块组成的。
/// &/summary&
/// &param name="pArray"&&/param&
public 集体(个体[] pArray)
一票个体 = new 个体[pArray.Length];
for (int i = 0; i & pArray.L i++)
一票个体[i] = pArray[i];
/// &summary&
/// 接口IEnumerable的实现函数,获取foreach用到的迭代器
/// &/summary&
/// &returns&&/returns&
public IEnumerator GetEnumerator()
return new 个体指针(一票个体);
/// &summary&
/// 个体指针:针对个体类的迭代器,继承自IEnumerator。
/// 提供了迭代器的走向函数支持。
/// &/summary&
public class 个体指针 : IEnumerator
/// &summary&
/// 一票个体的指针
/// &/summary&
public 个体[] 一票个体的指针;
/// &summary&
/// 迭代器当前位置的指示标志
/// &/summary&
int 位置 = -1;
/// &summary&
/// 个体指针的赋值:指向一堆无管理的个体
/// &/summary&
/// &param name="list"&&/param&
public 个体指针(个体[] list)
一票个体的指针 =
/// &summary&
/// 接口IEnumerator的实现函数,迭代器下移。foreach用到,我们不调用。
/// &/summary&
/// &returns&&/returns&
public bool MoveNext()
return (位置 & 一票个体的指针.Length);
/// &summary&
/// 接口IEnumerator的实现函数,迭代器复位。foreach用到,我们不调用。
/// &/summary&
public void Reset()
位置 = -1;
/// &summary&
/// 接口IEnumerator的实现函数,获取当前值。foreach用到,我们不调用。
/// &/summary&
public object Current
return 一票个体的指针[位置];
catch(IndexOutOfRangeException)
throw new InvalidOperationException();
class Program
public static void Main(string[] args)
个体[] 个体集合 = new 个体[3]
new 个体("1", "One"),
new 个体("2", "Two"),
new 个体("3", "Three")
集体 list = new 集体(个体集合);
foreach (个体 p in list)
Console.ReadKey();
上面的示例很清楚的演示了IEnumerator(迭代器接口)和IEnumerable(遍历接口)的用法。普遍代表一切。
我想用个体和集体的概念可以更容易理解这个功能。
照我目前理解,单独的IEnumerator接口没有任何用处。
IEnumerable接口可以和提供的各种继承自IEnumerator的类(ArrayList,Queue等)来配合,而没有必要每次都实现。
红黑联盟&版权所有
Copyright&& 2017
All rights reserved.先用一个修改过的代码来演示用法,只来干的,不来稀的。[csharp&/*&&* Created by SharpDevelop.&&* User: Owner&&* Date: &&* Time: 13:43&&* &&* To change this template use Tools | Options | Coding | Edit Standard Headers.&&*/ &using S &using System.C &&&/// &summary& &/// IEnumerable和IEnumrator组合起来使用实现foreach。 &/// &/summary& &namespace TestIEnumeratorAndIEnumratable &{ && & /// &summary& && & /// 个体类:这个类保存了单个体的信息和一个方法 && & /// &/summary& && & public class 个体 && & { && & & & public string 信息1; && & & & public string 信息2; && & & & &&& & & & public 个体(string 信息1, string 信息2) && & & & { && & & & & & this.信息1 = 信息1; && & & & & & this.信息2 = 信息2; && & & & } && & & & &&& & & & public void 报数() && & & & { && & & & & & Console.WriteLine(this.信息1 + & = & + this.信息2); && & & & } && & } && & &&& & /// &summary& && & /// 集体类:继承自IEnumerable接口,并提供foreach的可能。 && & /// &/summary& && & public class 集体 : IEnumerable && & { && & & & /// &summary& && & & & /// 集体就是一票个体 && & & & /// &/summary& && & & & private 个体[] 一票个体; && & & & &&& & & & /// &summary& && & & & /// 这个集体为了简便,是有初始的一群个体凑一块组成的。 && & & & /// &/summary& && & & & /// &param name=&pArray&&&/param& && & & & public 集体(个体[] pArray) && & & & { && & & & & & 一票个体 = new 个体[pArray.Length]; && & & & & & for (int i = 0; i & pArray.L i++) && & & & & & & & 一票个体[i] = pArray[i]; && & & & } && & & & &&& & & & /// &summary& && & & & /// 接口IEnumerable的实现函数,获取foreach用到的迭代器 && & & & /// &/summary& && & & & /// &returns&&/returns& && & & & public IEnumerator GetEnumerator() && & & & { && & & & & & return new 个体指针(一票个体); && & & & } && & } && & &&& & /// &summary& && & /// 个体指针:针对个体类的迭代器,继承自IEnumerator。 && & /// 提供了迭代器的走向函数支持。 && & /// &/summary& && & public class 个体指针 : IEnumerator && & { && & & & /// &summary& && & & & /// 一票个体的指针 && & & & /// &/summary& && & & & public 个体[] 一票个体的指针; && & & & &&& & & & /// &summary& && & & & /// 迭代器当前位置的指示标志 && & & & /// &/summary& && & & & int 位置 = -1; && & & & &&& & & & /// &summary& && & & & /// 个体指针的赋值:指向一堆无管理的个体 && & & & /// &/summary& && & & & /// &param name=&list&&&/param& && & & & public 个体指针(个体[] list) && & & & { && & & & & & 一票个体的指针 = && & & & } && & & & &&& & & & /// &summary& && & & & /// 接口IEnumerator的实现函数,迭代器下移。foreach用到,我们不调用。 && & & & /// &/summary& && & & & /// &returns&&/returns& && & & & public bool MoveNext() && & & & { && & & & & & 位置++; && & & & & & return (位置 & 一票个体的指针.Length); && & & & } && & & & &&& & & & /// &summary& && & & & /// 接口IEnumerator的实现函数,迭代器复位。foreach用到,我们不调用。 && & & & /// &/summary& && & & & public void Reset() && & & & { && & & & & & 位置 = -1; && & & & } && & & & &&& & & & /// &summary& && & & & /// 接口IEnumerator的实现函数,获取当前值。foreach用到,我们不调用。 && & & & /// &/summary& && & & & public object Current && & & & { && & & & & & get && & & & & & { && & & & & & & & try && & & & & & & & { && & & & & & & & & & return 一票个体的指针[位置]; && & & & & & & & } && & & & & & & & catch(IndexOutOfRangeException) && & & & & & & & { && & & & & & & & & & throw new InvalidOperationException(); && & & & & & & & } && & & & & & } && & & & } && & } && & class Program && & { && & & & public static void Main(string[] args) && & & & { && & & & & & 个体[] 个体集合 = new 个体[3] && & & & & & { && & & & & & & & new 个体(&1&, &One&), && & & & & & & & new 个体(&2&, &Two&), && & & & & & & & new 个体(&3&, &Three&) && & & & & & }; && & & & & & &&& & & & & & 集体 list = new 集体(个体集合); && & & & & & foreach (个体 p in list) && & & & & & & & p.报数(); && & & & & & &&& & & & & & Console.ReadKey(); && & & & } && & } &} &&上面的示例很清楚的演示了IEnumerator(迭代器接口)和IEnumerable(遍历接口)的用法。普遍代表一切。我想用个体和集体的概念可以更容易理解这个功能。照我目前理解,单独的IEnumerator接口没有任何用处。IEnumerable接口可以和系统提供的各种继承自IEnumerator的类(ArrayList,Queue等)来配合,而没有必要每次都实现。就爱阅读www.92to.com网友整理上传,为您提供最全的知识大全,期待您的分享,转载请注明出处。
欢迎转载:
推荐:    

我要回帖

更多关于 lterator 的文章

 

随机推荐