我正在尝试学习IEnumerable接口,以及如何向用户打印一些数据。
这是班级编号:
public class Number
{
public static IEnumerable<int> ReturnMyNumbers()
{
yield return 1;
yield return 2;
yield return 3;
foreach (int i in ReturnMyNumbers())
{
Console.WriteLine(i);
}
}
}
这是我的主要:
static void Main(string[] args)
{
var PrintMeTheNumbers = Number.ReturnMyNumbers();
Console.WriteLine(PrintMeTheNumbers);
Console.ReadLine();
}
它不起作用
答案 0 :(得分:0)
退一步看看你的代码实际上做了什么:
public static IEnumerable<int> ReturnMyNumbers()
{
yield return 1;
yield return 2;
yield return 3;
foreach (int i in ReturnMyNumbers())
{
Console.WriteLine(i);
}
}
查看foreach
循环,它的调用本身。这是错误递归的一个示例,没有退出条件,因此只会抛出stack overflow exception。
你还没有真正告诉我们你想要的功能是什么,但我假设你只是想让ReturnMyNumbers给你1,2,3
回来?
将您的方法更改为:
public static IEnumerable<int> ReturnMyNumbers()
{
yield return 1;
yield return 2;
yield return 3;
}
请注意,您的代码执行此操作的方式非常糟糕,yield
是一个非常漂亮的关键字,但对于您使用它而言它并不是非常有用。为什么不直接返回一个int数组?
return new [] { 1, 2, 3 };
无论您如何实施该方法,都需要修改Main()
方法,以便像以前一样在foreach中调用ReturnMyNumbers()
(尽管位置错误):
static void Main(string[] args)
{
foreach (int i in Number.ReturnMyNumbers())
{
Console.WriteLine(i);
}
Console.ReadLine();
}
答案 1 :(得分:-2)
什么是IEnumerable接口?
IEnumerable是一个定义GetEnumerator方法的接口 它返回一个IEnumerator接口,这允许只读访问 然后可以使用实现IEnumerable的集合集合 用for-each语句。
public class Customer : IEnumerable {
public IEnumerator GetEnumerator() { throw new NotImplementedException(); } }
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Collections;
namespace TestDomain
{
class Program
{
public static void Main(String[] args)
{
IEnumerable<int> Values = from value inEnumerable.Range(1, 10) select value;
foreach (int a in Values)
{
Console.WriteLine(a);
}
Console.ReadLine();
}
}
}