如何打印IEnumerable列表?

时间:2018-02-21 17:39:08

标签: c#

我正在尝试学习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();
}

它不起作用

2 个答案:

答案 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();

             }
     }
}