有人可以分享一个简单的例子,使用foreach
关键字与自定义对象?如何使用foreach关键字自定义对象在C#
14
A
回答
37
鉴于标签,我假设你的意思是在.NET中 - 我将选择谈论C#,因为这就是我所知道的。
foreach
声明(通常)使用IEnumerable
和IEnumerator
或它们的通用表亲。形式的语句:
foreach (Foo element in source)
{
// Body
}
其中source
实现IEnumerable<Foo>
是大致等效于:
using (IEnumerator<Foo> iterator = source.GetEnumerator())
{
Foo element;
while (iterator.MoveNext())
{
element = iterator.Current;
// Body
}
}
注意,IEnumerator<Foo>
设置在端,但是该语句退出。这对迭代器块很重要。
要自己实现IEnumerable<T>
或IEnumerator<T>
,最简单的方法是使用迭代器块。不要在这里写下所有的细节,最好的方法是直接引用chapter 6 of C# in Depth,这是免费下载。整个第6章是关于迭代器的。我有另一对夫妇的文章对我的C#在深入现场,太:
作为一个简单的例子,但:
public IEnumerable<int> EvenNumbers0To10()
{
for (int i=0; i <= 10; i += 2)
{
yield return i;
}
}
// Later
foreach (int x in EvenNumbers0To10())
{
Console.WriteLine(x); // 0, 2, 4, 6, 8, 10
}
要实现IEnumerable<T>
为类型,你可以这样做:
public class Foo implements IEnumerable<string>
{
public IEnumerator<string> GetEnumerator()
{
yield return "x";
yield return "y";
}
// Explicit interface implementation for nongeneric interface
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator(); // Just return the generic version
}
}
6
(我假设这里C#)
如果有自定义对象的列表,你可以只使用foreach以同样的方式为你做任何其他对象:
List<MyObject> myObjects = // something
foreach(MyObject myObject in myObjects)
{
// Do something nifty here
}
如果你想要创建自己的容器,您可以使用yield关键字(来自.Net 2.0及更高版本)和IEnumerable接口一起使用。
class MyContainer : IEnumerable<int>
{
private int max = 0;
public MyContainer(int max)
{
this.max = max;
}
public IEnumerator<int> GetEnumerator()
{
for(int i = 0; i < max; ++i)
yield return i;
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
然后用foreach使用它:
MyContainer myContainer = new MyContainer(10);
foreach(int i in myContainer)
Console.WriteLine(i);
相关问题
- 1. 如何使用自定义对象创建自定义对象?
- 2. 如何在C++中使用自定义的Objective-C对象?
- 3. 如何使用自定义关键字在php
- 4. 自定义JavaScript对象键
- 5. imap自定义关键字
- 6. 转换自定义类对象IEnuerable其在foreach语句使用
- 7. 如何在自定义HtmlHelper中使用C#对象?
- 8. Objective-C:使用自定义对象键从NSMutableDictionary获取值
- 9. iOS如何使用自定义对象键创建NSPredicate?
- 10. 如何使用stdext :: hash_map键是一个自定义对象?
- 11. 在用户定义的类中使用C#使用关键字
- 12. 如何创建自定义关键字C#
- 13. C#4动态关键字 - 如何设置自定义属性
- 14. 使用自定义对象作为字典的键
- 15. 使用自定义键将对象转换为对象数组
- 16. C#字典 - 自定义对象
- 17. 如何使用相关对象的自定义管理器?
- 18. 使用自定义对象
- 19. 使用自定义对象
- 20. 如何使用C将POST自定义对象POST到web api#
- 21. 如何在自定义搜索框中使用关键事件?
- 22. 如何使用自定义对象使用凌空在Android android
- 23. 如何使用QBRTCSession对象发送自定义字符串
- 24. 自定义字典对象?
- 25. 如何使用foreach获取关键值?
- 26. 使用自定义关键字设置链接在javascript
- 27. 在自定义方法中使用jQuery'this'关键字
- 28. 使用自定义适配器在ListView中搜索关键字
- 29. 如何在json对象中使用可变定义的键?
- 30. 如何知道哪些对象可以在C#中使用关键字USING?
具体是什么问题?如何*使用foreach与自定义对象?或者如何在自定义对象中编写代码,以便可以使用foreach? – 2008-12-08 09:13:49
如何在自定义对象中编写代码,以便可以使用foreach – user42070 2008-12-08 09:15:52