如何将List转换为IEnumerable?

时间:2018-02-14 20:43:03

标签: c# list ienumerable

我正在解决一个需要编写一个函数的问题,该函数只返回一个对象List中的整数(我编写了函数,但它没有工作)。我已经想了很长时间如何将List转换为IEnumerable,我正在寻找如何解决这个问题,但我还没有找到合适的解决方案。请问,任何人都可以帮我解决这个问题,也许很简单吗?

public static IEnumerable<int> GetIntegersFromList(List<object> listOfItems)
{
    List<object> result = new List<object>();
    for (int i = 0; i < listOfItems.Count - 1; i++)
    {
        if (listOfItems[i] is string)//the input is only integers and strings
        {
            listOfItems.RemoveAt(i);
        }
    }
    return listOfItems;//this doesn't work
}

3 个答案:

答案 0 :(得分:9)

您不会将列表转换为IEnumeruble<T> - 列表已经是IEnumerable<T>。您的代码中的问题是object的列表 IEnumerable<int>

您有三种解决方法:

  • 制作一个新的List<int>,在循环中填充它,然后将其返回,或
  • 使用yield return来避免明确构建列表,或
  • 将LINQ的OfType<int>应用于listOfItems,以便在一行代码中获得结果。

答案 1 :(得分:3)

正如另一个答案所说,Linq是一种可行的方式。

这是一种紧凑的单线方法,无需进行测试。

public static IEnumerable<int> GetIntegersFromList(List<object> listOfItems)
{
    return listOfItems.Where(i => i is int)).Select(i => (int) i).ToList();
}

它甚至可以更短

return listOfItems.OfType<int>().ToList();

向@Blake Thingstad和@mwwills索取他们的意见。

答案 2 :(得分:0)

static void Main()
{
   List<object> dd = new List<object>() { 1, 2, "a", "b", 8 };

   var dd2 = new List<int>(GetIntegersFromList(dd));

   dd2.ForEach(j => Console.Write("{0}\t", j));

    Console.ReadKey();
}

public static IEnumerable<int> GetIntegersFromList(List<object> listOfItems)
{
      return listOfItems.OfType<int>().ToList();
}