我正在解决一个需要编写一个函数的问题,该函数只返回一个对象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
}
答案 0 :(得分:9)
您不会将列表转换为IEnumeruble<T>
- 列表已经是IEnumerable<T>
。您的代码中的问题是object
的列表不 IEnumerable<int>
。
您有三种解决方法:
List<int>
,在循环中填充它,然后将其返回,或yield return
来避免明确构建列表,或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();
}